Cómo serializar solo la identificación de un niño con Jackson
Existe una forma integrada de serializar solo el id de un hijo cuando se usa Jackson (fasterxml.jackson 2.1.1)? Queremos enviar un Order
vía REST que tenga una referencia Person
. Sin embargo, el objeto person 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? ¿Impediría eso que los datos Person
se envíen de vuelta al solicitar un objeto Order
? No estoy seguro sin embargo, si voy a necesitar eso, pero me gustaría tener el control sobre él si es posible...
1 answers
Hay un par de maneras. La primera es usar @JsonIgnoreProperties
para eliminar propiedades de un hijo, así:
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 Hijo 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 serialización, e ignoraría propiedades distintas de id. Sin embargo, el resultado no se envolvería como Objeto.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-11 00:29:33