나는 데이터베이스에서 영속화 된 두 엔티티가있는 javaEE 애플리케이션을 가지고있다. 두 엔티티 모두 양방향 연관이 있습니다.Circular Json serializing
제 1 개체 :
@Entity
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id", scope=Child.class)
public class Child implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne(fetch= FetchType.LAZY)
private Father father;
}
2 실체는 모두 같은 능숙를 통해 노출되는
@Entity
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id", scope=Father.class)
public class Father implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne(fetch= FetchType.LAZY)
private Child child;
}
:
@Path("father")
@Stateless
public class FatherResource{
@Context
private UriInfo uri;
@Inject FatherDao fatherDao;
public FatherResource() {
}
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Father> getFathers() {
//TODO return proper representation object
return fatherDoa.getFathers();
}
}
단지에서 아버지 객체를 가져옵니다 DAO도 있습니다 데이터베이스
지금 문제는 순환 json 구조입니다. 다음과 같이 표시됩니다.
{ "id":"1", "child": {"id":"1", "father": {"id":"1", "child":{"id":"1", [...]
아이를 한 번보고 싶습니다. 내가 얻고 싶은 것은
@JsonIgnoreProperties({"child"}) //above the class
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") //above the class
@JsonIgnore //above the property
을 : 나는
JDK 7
JaxRS
Jackson
Hibernate/Eclipselink
Glassfish 4.0
하지 않는 다른 테스트를 사용하고
{ "id":"1", "child": {"id":"1"}}
내가 사용하려고 직장 : (210)
@Entity
@JsonSerialize
@JsonIdentityInfo(generator=ObjectIdGenerators.UUIDGenerator.class, property="id", scope=Object.class)
public class Father implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne(fetch= FetchType.LAZY)
private Child child;
}
ApplicationConfig.java :
public class ApplicationConfig extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new java.util.HashSet<Class<?>>();
// following code can be used to customize Jersey 2.0 JSON provider:
try {
Class jsonProvider = Class.forName("org.glassfish.jersey.jackson.JacksonFeature");
} //...
//..
beans.xml 환경 :
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="annotated">
</beans>
질문은 무엇입니까? 특히, 당신은 무엇을 기대 했습니까? –
내가 얻고 싶습니다 : { "id": "1", "child": { "id": "1"}} – Laokoon
Jackson의 ObjectIdentity 기능을 사용해 보셨습니까? http://wiki.fasterxml.com/JacksonFeatureObjectIdentity –