我试图有条件地@JsonIgnore实体中的某些字段(如果它们是从另一个实体的集合中序列化的(很多到一个)).
我试图将@JsonIgnoreProperties添加到集合中,但是据我了解,注释并非用于此目的.
class A {
//some fields
@ManyToOne private B b; //if only A is requested,this should NOT be ignored
}
class B {
//some fields
@OneToMany
@IgnorePrivateBInAToAvoidStackOverflow
private Set<A> collectionOfAs;
}
有什么办法可以实现这种行为?
最佳答案
为了避免循环引用无限递归(stackoverflow错误),必须用@JsonIdentityInfo注释calss
所以您的课程看起来像:
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,property = "id")
class A {
//some fields
//Integer id;
@OneToMany private B b; //if only A is requested,this should NOT be ignored
}
B类可双向使用的情况相同:
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,property = "id")
class B {
//some fields
@ManyToOne
@IgnorePrivateBInAToAvoidStackOverflow
private Set<A> collectionOfAs;
}
请注意,该属性引用了您的唯一字段名称(在此示例中设置为id)
有关更多阅读,请参阅此article