【问题标题】:How avoid infinite loop during Json Serialization in JavaJava中Json序列化期间如何避免无限循环
【发布时间】:2014-12-15 20:13:47
【问题描述】:

我使用休眠检索兄弟列表

public class Brother {
    public int brotherId;
    public string name;

    public List<Brother> brothers;

    public Brother()
    {
        brothers = new ArrayList<Brother>();
    }

    //Getter Setter
} 

Hibernate 是在兄弟列表中使用惰性选择配置的,这在 Java 端有效, 但问题是当我想将 Brother 对象序列化为 JSON 时。

I've got org.codehaus.jackson.map.JsonMappingException: Infinite recursion (StackOverflowError)

例如,Bryan 可以将 Mark 作为兄弟,反之亦然...

我该如何解决?有什么方法可以指示杰克逊库的最大递归次数?

我的代码,真的很简单。

Brother brother = this.myservice.getBrother(4);
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(brother));

【问题讨论】:

  • 你能添加你如何使用Jackson的代码吗?
  • 您可以使用@JsonIgnore,对于Jackson > 1.6,请在属性上使用:@JsonManagedReference@JsonBackReference,以避免无限递归。
  • 我会测试的。但如果我使用 JsonIgnore 兄弟列表将被忽略,我不希望这样。 @JsonBackReference 会生成这样的东西吗? { "brotherId": 4, "name": "bryan", "brothers": [ { "brotherId": 3, "name": "mark", "brothers": null } ] }
  • 你能发布更多代码,以及示例输入/输出。同样从未来请使用@sol4me,如果你会给我写点东西,我会收到通知。

标签: java json hibernate serialization infinite-loop


【解决方案1】:

由于循环引用而出现问题。

既然Jackson 1.6可以用两个注解解决无穷大 在不忽略 getter/setter 的情况下递归问题 序列化:@JsonManagedReference@JsonBackReference

更多信息请参考here

【讨论】:

    猜你喜欢
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多