ソートされたマルチセットにシリアル化/逆シリアル化する必要があるフィールドのクラスの 1 つで Guava TreeMultiset を使用しています。カスタム コンパレータを使用して TreeMultiset を構築しています。
private SortedMultiset<UserFavCatsNode> ms = TreeMultiset.create(new customComparator());
シリアル化は正常に機能しているように見えますが、Jackson が TreeMuliset インスタンスを構築するためのカスタム コンパレータにアクセスできないため、逆シリアル化は失敗します。デシリアライズ中にコンパレータインスタンスを渡すにはどうすればよいですか?
最初に検索したところ、次の 2 つのオプションが見つかりました。
- Comparable インターフェースを実装します。これは機能しますが、クラス自体に独自の順序付けを課すのは不十分です。
- 投稿 ( http://jackson-users.ning.com/forum/topics/de-serialize-treeset-by-first-defining-a-comparator ) に基づいてラッパー クラスを作成し、呼び出して回避しようとしました。これは @JsonDeserialize アノテーションを使用して
public Constructor(@JsonDeserialize(as = CustomTreeMultiset.class) field) {
//
}
Guava TreeMultiset は finalであり、それを拡張してラッパーの逆シリアル化クラスを提供する CustomTreeMultiset を実装できないため、この戦略は失敗します。カスタムの順序付けロジックをクラスに注入するよりも良い解決策はありますか?