幾個月後,有很多研究,我實現了自己的解決方案,以保持我的域名清除傑克遜依賴關係。
public class Parent {
private Child child;
public Child getChild(){return child;}
public void setChild(Child child){this.child=child;}
}
public class Child {
private Parent parent;
public Child getParent(){return parent;}
public void setParent(Parent parent){this.parent=parent;}
}
首先,你必須聲明每個雙向關係的實體中是這樣的:
public interface BidirectionalDefinition {
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id", scope=Parent.class)
public interface ParentDef{};
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id", scope=Child.class)
public interface ChildDef{};
}
之後,對象映射器可以自動配置:
ObjectMapper om = new ObjectMapper();
Class<?>[] definitions = BidirectionalDefinition.class.getDeclaredClasses();
for (Class<?> definition : definitions) {
om.addMixInAnnotations(definition.getAnnotation(JsonIdentityInfo.class).scope(), definition);
}
您是否能夠最終找到一種方法來指定您希望序列化發生的遞歸深度? – 2013-12-21 05:47:42
我通過在被引用的實體上使用@JsonIgnore來解決(使用遞歸),所以我簡單地不包括在序列化中。當我需要特定的實例時,我已經擁有了該ID,並且我額外撥打了該實例。我沒有使用一般的解決方案,幸運的是我有幾個案例。 – 2013-12-25 13:23:46