現在、アプリケーション サーバーで静的データを使用するベース API の設計に取り組んでおり、データをシリアル化する方法として Jackson を選択しました。問題は、最終的な JSON ファイルにネストしたくないため、次のようになることです。
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class Parent {
public long id;
public String name;
@JsonIdentityReference(alwaysAsId = true)
@JsonManagedReference
public Set<Child> children = new HashSet<>();
}
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class Child {
public long id;
public String name;
@JsonIdentityReference(alwaysAsId = true)
@JsonBackReference
public Parent parent;
}
public static class Registry {
public Set<Parent> parents = new HashSet<>();
public Set<Child> children = new HashSet<>();
}
これはシリアル化に最適です。次のようなものが得られます。
{
"parents" : [ {
"id" : 1,
"name" : "DADDY",
"children" : [ 1, 2 ]
} ],
"children" : [ {
"id" : 1,
"name" : "JUNIOR"
}, {
"id" : 2,
"name" : "JUNIOR'S SISTER"
} ]
}
しかし、今、私はそれをデシリアライズしたいのですが、残念ながら例外がスローされます: Could not resolve Object Id [2] (for [simple type, class org.photon.Main$Child])
. いくつかの調査の後、カスタムの型 ID リゾルバーを実装する必要があると言われましたが、リソースが不足しているため何もできませんでした。Registry を逆シリアル化するときに、Parent のインスタンスを子に取得し、Child のインスタンスを親に取得する方法を Jackson に伝えたいと思います。
それを修正する方法を知っていますか、それとも他の方法がありますか?