我正面临“无限递归(StackOverflowError)”错误 并遵循本手册:http://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion我试图在我的情况下解决它,但它似乎不同,因为在我的情况下,对象指向自己。
我的意思是,我有这个对象:
public class PRBOperatorId implements Serializable {
private static final long serialVersionUID = 1L;
public PRBOperatorType type = null;
public PRBOperatorId parentId = null;
public PRBOperatorId childId = null;
public String name = null;
public String[] formats = null;
public String description = null;
public String[] examples = null;
public String returnedFormat = null;
public String comments = null;
服务正在使用它来使用递归方法获取根运算符的所有运算符:
@Override
public PRBOperatorId[] getAllChildren() {
LinkedList<PRBOperatorId> list = new LinkedList<PRBOperatorId>();
return getAllChildrenRec(operatorsRoot.getId(), list).toArray(new PRBOperatorId[list.size()]);
}
public Collection<PRBOperatorId> getAllChildrenRec(PRBOperatorId rootId, LinkedList<PRBOperatorId> childrenIds) {
try {......
我不是通过java对象映射数据库表(我实际上没有对象之间的一对多关系),我只是试图创建一个Spring休息控制器而不是我在服务。
我该如何解决?
感谢。
答案 0 :(得分:0)
你告诉杰克逊如何识别物体吗?因为如果你这样做,即使对象指向自身也没有处理循环引用的问题。
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "name")
public static class PRBOperatorId implements Serializable
{
private static final long serialVersionUID = 1L;
public PRBOperatorId parentId = null;
public PRBOperatorId childId = null;
public String name = null;
}
public static void main(String[] args) {
PRBOperatorId op = new PRBOperatorId();
op.parentId = op;
op.childId = op;
op.name = "aaa";
try {
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(System.out, op);
} catch (Exception e) {
e.printStackTrace();
}
}
输出:
{"name":"aaa","parentId":"aaa","childId":"aaa"}