Java嵌套忽略内部属性

时间:2017-03-24 14:45:22

标签: java json oop serialization

我有一个处理类型之间关系的对象模型。这些引用有时会自行循环,并且为了阻止它(例如在REST调用中)我使用@JsonIgnore标记之类的东西来确保我没有得到无限的嵌套递归。

这个问题更多的是背景问题。如果我想要一个项目包含在一个点而不是另一个点(如果是嵌套的),@JsonIgnore会从两个点停止它。

示例:

public class A implements Serializable{
    Set<B> bs;
    Set<C> cs;
    ...
}

public class B implements Serializable{
    String name;
    Set<D> ds;
    ...
}

public class C implements Serializable{
    B b;
    ...
}

public class D implements Serializable{
    ...
}

如果A是我运送物品的主要容器。在B中列出的A上下文中,我希望显示Set<D>。但是,如果在B的上下文中使用了对象C,我想隐藏Set<D>并仅显示名称。

如果我在@JsonIgnore上标记B.ds,则无论如何都不会显示C.b。我可以在@JsonIgnore("ds")上放一些注释/自定义来忽略内部属性吗? $MySQL_Handle = mysqli_connect(HOSTNAME,DATABASE_USERNAME,DATABASE_PASSWORD,DATABASE_NAME) $sSQL= 'SET CHARACTER SET utf8'; mysqli_query($MySQL_Handle,$sSQL) 还是什么?还有另一种方法可以完全解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

您可以使用@JsonView注释字段,然后指定要在特定情况下使用的序列化视图。 Here's a post about using it with SpringMVC但无论如何,方法都是一样的。

所以在你的具体例子中,

public class View {
    interface Full {}
    interface Summary {}
}

public class B implements Serializable{
    @JsonView({View.Summary,View.Full})
    String name;

    @JsonView(View.Full)
    Set<D> ds;

}