Gson引发的StackOverflowError错误

2020-03-09  本文已影响0人  天草二十六_简村人

首先,贴下引用的代码

OrderNotifyEvent event;
if (log.isInfoEnabled()) {
            log.info("订单通知事件订阅内容: {}", new Gson().toJson(event));
        }
@Builder
@Data
public class OrderNotifyEvent {

    /**
     * 子订单集合
     */
    private List<Order> orders;

    /**
     * 事件类型
     */
    private int eventType;
}

具体的对象见下:

public class Order {
 @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, mappedBy = "order")
    private List<OrderItem> items = Lists.newArrayList();
}
public class OrderItem {
@ManyToOne(fetch = FetchType.LAZY)
    private Order order;
}

最后贴上详细错误信息,报错的原因:待序列化的对象出现循环引用并递归,最终导致栈溢出。

Exception in thread "XH_EventPool_1978813508" java.lang.StackOverflowError
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:449)
    at java.lang.StringBuffer.append(StringBuffer.java:270)
    at java.io.StringWriter.write(StringWriter.java:101)
    at com.google.gson.stream.JsonWriter.string(JsonWriter.java:566)
    at com.google.gson.stream.JsonWriter.writeDeferredName(JsonWriter.java:402)
    at com.google.gson.stream.JsonWriter.value(JsonWriter.java:527)
    at com.google.gson.internal.bind.TypeAdapters$11.write(TypeAdapters.java:310)
    at com.google.gson.internal.bind.TypeAdapters$11.write(TypeAdapters.java:295)
    
上一篇 下一篇

猜你喜欢

热点阅读