我在Java SpringBoot 1.5.7中有一个场景,我有多个类,我希望能够通过继承对每个类应用不同的 JsonView。
ClassA{
@JsonView({SummaryView.class})
public String name;
@JsonView({DetailView.class})
public String description;
public interface SummaryView{}
public interface DetailView extends SummaryView {}
}
Class A 是 Class B 中的一个属性,ClassB 只有在使用 ClassB 的 DetailView JsonView 时才应该序列化为 Json。
ClassB{
@JsonView({SummaryView.class})
private String name;
@JsonView({DetailView.class})
private String description;
@JsonView({DetailView.class})
private ClassA classA;
public interface SummaryView{}
public interface DetailView extends SummaryView, ClassA.SummaryView {}
}
B 类也是 C 类的属性。
ClassC{
@JsonView({SummaryView.class})
private String name;
@JsonView({DetailView.class})
private String description;
@JsonView({DetailView.class})
private ClassB classB;
public interface SummaryView{}
public interface DetailView extends SummaryView, ClassB.DetailView {}
}
在我的现实生活场景中,我最多需要 5 级继承。在我的休息控制器中,我想使用不同的视图。当我使用ClassC.DetailView.class视图时,JsonView 只使用直接类,即ClassC和ClassB,但ClassA 属性不包含在生成的 Json 中。结果是:
{
"name": "classC",
"description": "Has submodel Class B",
"classB": {
"name": "classB",
"description": "Has submodel ClassA",
"classA": { }
}
}
我还尝试将最外层的 JsonView 类放在最内层的类中,即。在ClassA 属性中有@JsonView(ClassC.DetailView.class)但它也不起作用。
我想要的结果是:
{
"name": "classC",
"description": "Has submodel Class B",
"classB": {
"name": "classB",
"description": "Has submodel ClassA",
"classA": {
"name": "classA"
}
}
}
我如何让这个工作?