0

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 は直接のクラス、つまりClassCClassBを操作するだけですが、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"
    }
  }
}

これを機能させるにはどうすればよいですか?

4

1 に答える 1