我试图将已经由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}})。
如果有人遇到此问题,请分享您的解决方案。任何意见将不胜感激。谢谢。
答案 0 :(得分:0)
StackOverflowError意味着VRP数据集具有太多级别的嵌套元素,用于使用该编组器进行JSON序列化,可能是因为JSON编组器编写得很差(因为它使用递归而不是循环来处理嵌套元素,因此它无法处理更多比1024
嵌套级别。)
另一方面,人们也可以争辩说VRP数据结构不是真正的XML / JSON映射友好,因为它有一个自定义链表(并且该链表中的每个元素最终都是XML中的另一个嵌套) / JSON数据集)。自定义converter(可能从java.util.LinkedList
的转换器中复制)可以展平该列表以避免嵌套。