0

REST API を公開する Spring Boot Web アプリケーションを開発していますが、JSON シリアル化に問題があります。

1 対多の双方向関係にある 2 つのクラス A と B があるとします。

これは、次のようなものがあることを意味します。

public class A {
    private List<B> bList;
    ...
}

public class B {
    private A owner;
    ...
}

これをJSONシリアライズするとなると、もちろんループがあります。

そして、これは私の問題です:

  • 焦点を当てた API メソッドA(たとえば、「DB 内のすべての As のリストを教えてください」) では、次のような JSON シリアル化が必要です。
    • Aオブジェクトには のリストが含まれていBます
    • Bオブジェクトに A 所有者が含まれていない
  • に焦点を当てた API メソッドB(たとえば、「DB 内のすべての s のリストを教えてくださいB」) では、次のような JSON シリアライゼーションが必要です。
    • Aオブジェクトにはそのリストが含まれていませB
    • BオブジェクトにはA所有者が含まれています

注釈を使用して動作させることができると@JsonView思いますが、それがエレガントなソリューションだとは思いません。私のアプリケーション (2 つ以上のクラスを持つ) では、少なくとも 4 つまたは 5 つの JsonView を作成して管理する必要があります。そのため、モデル クラスでは、属性ごとに、乱雑な一連の@JsonView注釈を管理する必要があります。逆に言えば、モデルクラスはAPIメソッドによってJSON表現が異なるということを意識すべきではないと思います。

カスタム JSON シリアライザーの使用方法を検索したところ、Jackson がその SimpleModule でそれを可能にしていることがわかりました。ただし、SimpleModule では、ケースバイケースで使用するシリアライザーを選択できないようです (常に最後に追加されたシリアライザーを使用します)。

だから私は今少し無知です。コントローラーがクラスをシリアル化する方法を選択できるようにするクリーンな方法を知っている人はいますか?

4

3 に答える 3