java - serialize - objectmapper writevalueasstring
Cómo serializar solo la identificación de un niño con Jackson (1)
¿Existe una forma incorporada de serializar solo la identificación de un niño cuando se usa Jackson (fasterxml.jackson 2.1.1)? Queremos enviar un Order
través de REST que tiene una referencia de Person
. Sin embargo, el objeto persona es bastante complejo y podríamos actualizarlo en el lado del servidor, por lo que todo lo que necesitamos es la clave principal.
¿O necesito un serializador personalizado para esto? ¿O necesito @JsonIgnore
todas las demás propiedades? ¿Eso evitaría que los datos de la Person
se envíen de vuelta al solicitar un objeto de Order
? Todavía no estoy seguro de si lo necesitaré, pero me gustaría tener el control si es posible ...
Hay dos formas. El primero es usar @JsonIgnoreProperties
para eliminar propiedades de un niño, de esta manera:
public class Parent {
@JsonIgnoreProperties({"name", "description" }) // leave "id" and whatever child has
public Child child; // or use for getter or setter
}
otra posibilidad, si el objeto Child siempre se serializa como id:
public class Child {
// use value of this property _instead_ of object
@JsonValue
public int id;
}
y un enfoque más es usar @JsonIdentityInfo
public class Parent {
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
@JsonIdentityReference(alwaysAsId=true) // otherwise first ref as POJO, others as id
public Child child; // or use for getter or setter
// if using ''PropertyGenerator'', need to have id as property -- not the only choice
public int id;
}
que también funcionaría para la serialización e ignoraría otras propiedades que no fueran id. Sin embargo, el resultado no se envolverá como Objeto.