writevalueasstring serialize jsonvalue jsonproperty example java json serialization jackson spring-data

java - serialize - un único serializador personalizado para todos los objetos anotados incrustados que los reemplaza con sus identificadores



objectmapper writevalueasstring (1)

Necesita utilizar @JsonIdentityReference(alwaysAsId = true) en la variable de categoría.

P.ej:

@Entity public Product { @Id public int id; public String name; @ManyToOne(cascade = {CascadeType.DETACH} ) @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id", scope=Category.class) @JsonIdentityReference(alwaysAsId = true) Category category; @ManyToMany(cascade = {CascadeType.DETACH} ) Set<Category> secondaryCategories; }

Tengo entidades como esas:

@Entity public Product { @Id public int id; public String name; @ManyToOne(cascade = {CascadeType.DETACH} ) Category category @ManyToMany(cascade = {CascadeType.DETACH} ) Set<Category> secondaryCategories; }

y

@Entity public Category { @Id public int id; public String name; @JsonCreator public Category(int id) { this.id = id; } public Category() {} }

es posible anotar solo secondaryCategories propiedades de clase de category o de category y de category secondaryCategories con una anotación que las serializará para que sean solo sus identificadores cuando se incrusten.

ahora mismo estoy obteniendo del servidor cuando hago un GET para producto con id = 1:

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

es posible regresar?

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

@JsonIdentityReference(alwaysAsId = true) clase de Category con @JsonIdentityReference(alwaysAsId = true) funciona en general, pero también devuelve ids cuando estoy obteniendo una o una lista de categorías. Necesito la conversión de id solo cuando la Categoría está incrustada.

¡Gracias!