Jackson-serialización de entidades con relaciones bidireccionales (evitando ciclos)
Tengo dos entidades:
Parent {
Child[] children;
}
and
Child {
Parent parent;
}
Estoy al tanto de @JsonBackReference
y @JsonManagedReference
.
Son buenos, si estoy serializando instancias de Parent
.
Pero también necesito transferir instancias de Child
y quiero que se rellene el campo parent
.
En otras palabras:
- En la serialización de
Parent
debería tenerchildren
pero su campo padre podría estar vacío (se puede resolver usando anotaciones de referencia json). - En la serialización de
Child
debe tenerparent
con suschildren
(perochildren
no tienen que tenerparent
poblados.
¿Hay alguna manera de resolverlo usando las capacidades estándar de Jackson?
Es decir, omita la serialización de entidades que ya estaban serializadas en lugar de marcar campos elegibles o no elegibles para serialización.
2 answers
Jackson 2.0 soporta referencias completas de objetos cíclicos. Ver " Jackson 2.0 released " (sección 'Manejar Cualquier Gráfico de Objetos, incluso Cíclicos!') por ejemplo.
Básicamente, necesitará usar new @JsonIdentityInfo
para los tipos que requieren manejo de estilo id/idref. En su caso, esto sería ambos tipos Parent
y Child
(si uno extiende el otro, simplemente agréguelo a super type y está bien).
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
2012-04-09 17:21:24
La implementación de una interfaz muy práctica se proporciona en la biblioteca Jackson 2 como
@Entity
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
public class Parent { ....
@Entity
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
public class Child { ....
En maven
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.0.2</version>
</dependency>
@StaxMan proporcionó un buen enlace para comenzar desde
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
2015-03-07 01:21:02