私はこのようなクラス構造を持っています
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」を表示するにはどうすればよいですか?