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...

Author: Elnur Abdurrakhimov, 2013-07-09

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.

 94
Author: StaxMan,
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