Deserializador personalizado único para todos los objetos como sus identificadores u objetos completos incrustados durante POST / PUT

@Entity
public Product {
   @Id
   public int id;

   public String name;

   @ManyToOne(cascade = {CascadeType.DETACH} )
   Category category

   @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.DETACH} )
   Set<Category> secondaryCategories;


}

y esta entidad:

@Entity
public Category {
   @Id
   public int id;

   public String name;
}

Me gustaría poder enviar una POST con json

{ name: "name", category: 2, secondaryCategories: [3,4,5] } del lado del cliente

y poder ser deserializado como:

{ name: "name", category: {id: 2 }, secondaryCategories: [{id: 3}, {id: 4}, {id: 5}] }

en caso de que fuera enviado como

 { name: "name", category: {id: 2 }, secondaryCategories: [{id: 3}, {id: 4}, {id: 5}] }

Me gustaría que siguiera funcionando como ahora

¿Qué tipo de anotación y deserializador personalizado necesito? Con suerte, el deserializador puede funcionar para todos los objetos posibles que tienen id como propiedad

¡Gracias!

Editar

Ver los zafrost preferidos@JsonCreator responder (https://stackoverflow.com/a/46618366/986160)Ver mi respuesta completa (https://stackoverflow.com/a/46618193/986160) para extenderStdDeserializer y usando la deserialización predeterminada a través deObjectMapper

Respuestas a la pregunta(3)

Su respuesta a la pregunta