JsonMappingException尝试将车辆路径解决方案转换为Json时的无限递归

时间:2015-06-24 10:51:19

标签: java json recursion stack-overflow optaplanner

我试图将已经由optaplanner解算器处理的车辆路径解决方案对象转换为json字符串,但每当我尝试它时,它会不断提示我这个错误:

  

堆栈追踪:

     

com.fasterxml.jackson.databind.JsonMappingException:无限   递归(StackOverflowError)(通过引用链:   app.chameleon.marketing.salesman.routing.optimization.server.model.VehicleRoutingSolution [ “customerList”] - > java.util.ArrayList中[0] - > app.chameleon.marketing.salesman.routing.optimization.client。 model.Customer [ “nextCustomer”] - >

     

...

     

app.chameleon.marketing.salesman.routing.optimization.client.model.Customer [ “previousStandstill”])     在   com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:653)

     

...

     

引起:java.lang.StackOverflowError

我曾尝试使用@JsonManagedReference和@JsonBackReference,但我无法弄清楚如何使用它。自从每次使用它以来,previousStandstill类的某些成员都没有转换为json(例如nextCustomer或{{1}})。

如果有人遇到此问题,请分享您的解决方案。任何意见将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

StackOverflowError意味着VRP数据集具有太多级别的嵌套元素,用于使用该编组器进行JSON序列化,可能是因为JSON编组器编写得很差(因为它使用递归而不是循环来处理嵌套元素,因此它无法处理更多比1024嵌套级别。)

另一方面,人们也可以争辩说VRP数据结构不是真正的XML / JSON映射友好,因为它有一个自定义链表(并且该链表中的每个元素最终都是XML中的另一个嵌套) / JSON数据集)。自定义converter(可能从java.util.LinkedList的转换器中复制)可以展平该列表以避免嵌套。