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!