1

現在、アプリケーション サーバーで静的データを使用するベース 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 に伝えたいと思います。

それを修正する方法を知っていますか、それとも他の方法がありますか?

4

0 に答える 0