我知道@JsonIgnore@JsonManagedReference@JsonBackReference都用于解决Infinite recursion (StackOverflowError),这两者之间有什么区别?

注意:
这些是 jackson 的注释。

最佳答案

假设我们有

private class Player {
    public int id;
    public Info info;
}
private class Info {
    public int id;
    public Player parentPlayer;
}

// something like this:
Player player = new Player(1);
player.info = new Info(1, player);

序列化
@JsonIgnore
private class Info {
    public int id;
    @JsonIgnore
    public Player parentPlayer;
}

@JsonManagedReference + @JsonBackReference
private class Player {
    public int id;
    @JsonManagedReference
    public Info info;
}

private class Info {
    public int id;
    @JsonBackReference
    public Player parentPlayer;
}

将产生相同的输出。上面演示示例的输出是:{"id":1,"info":{"id":1}}
反序列化

这是主要区别,因为使用@JsonIgnore反序列化
只会将该字段设置为null,因此在我们的示例中parentPlayer将为== null。

java - @JsonIgnore和@ JsonBackReference,@ JsonManagedReference之间的区别-LMLPHP

但是有了@JsonManagedReference + @JsonBackReference,我们将在那里获得Info引用

java - @JsonIgnore和@ JsonBackReference,@ JsonManagedReference之间的区别-LMLPHP

关于java - @JsonIgnore和@ JsonBackReference,@ JsonManagedReference之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37392733/

10-13 03:24