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 では、ケースバイケースで使用するシリアライザーを選択できないようです (常に最後に追加されたシリアライザーを使用します)。
だから私は今少し無知です。コントローラーがクラスをシリアル化する方法を選択できるようにするクリーンな方法を知っている人はいますか?