0

私はこのようなクラス構造を持っています

class A {
    private List<B> b;

    public List<B> getB() {
        return b;
    }

    public void setB(List<B> b) {
        this.b = b;
    }

}

@JsonTypeInfo(use=Id.CLASS, include=As.PROPERTY, property="@class")
abstract class B {

}

@JsonTypeInfo(use=Id.NONE)
class C extends B {

}

@JsonTypeInfo(use=Id.CLASS, include=As.PROPERTY, property="@class")
class D extends B {

}

ObjectMapper (fasterxml) を使用して C と D のインスタンスの JSON 形式で記述すると、D には "@class" がありますが、C にはありません。それは私の期待に応えます。

ただし、クラスAのインスタンスに適用すると、Cのインスタンスであっても、すべての値に「@class」が表示されます。一方、クラスBの@JsonTypeInfoを削除すると、「@class」さえ存在しませんD のインスタンスの場合。

これは私のテストコードです

List<B> list = new ArrayList<B>();
    list.add(new D());
    list.add(new C());

    list.forEach(p->{try {
        System.out.println(mapper.writeValueAsString(p));
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }});

    A a = new A();
    a.setB(list);
    System.out.println(mapper.writeValueAsString(a));

必要なときに「@class」を表示するにはどうすればよいですか?

4

1 に答える 1

0

現時点では、2 つの別個のクラスを使用してモデルの構造をリファクタリングする必要があります。クラスには Id=CLASS が含まれ、もう 1 つは NONE です。

これに関するより良い解決策があることを願っています。

于 2015-08-02T09:59:49.350 に答える