Java SpringBoot 1.5.7には複数のクラスがあるシナリオがあり、継承などを通じてそれぞれに異なる JsonViews を適用できるようにしたいと考えています。
ClassA{
@JsonView({SummaryView.class})
public String name;
@JsonView({DetailView.class})
public String description;
public interface SummaryView{}
public interface DetailView extends SummaryView {}
}
クラス A はクラス B のプロパティです。クラス B の DetailView JsonView が使用されている場合にのみ、クラス B を 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"
}
}
}
これを機能させるにはどうすればよいですか?