JSON入力を受け取るフロントエンドライブラリ用のJava SDKを作成しようとしています。基本的に、このSDKは特定のタイプのオブジェクトをJSONに変換し、そのフロントエンドライブラリで消費されます。Jackson(Polymorphic)を使用してデシリアライズするときにフィールドが見つからない
私は、アノテーションシステムを使用してjacksonの多態的なシリアライゼーション/逆シリアル化を使用しています。
私は基本クラスAと2つの子クラスBとCを持っています。クラスAはどのクラス(BまたはC)が使用されるかを決定するための型フィールドを持っています。構文は次のようなものになります。私はジャクソンのObjectMapper
のreadValue
機能を使用して文字列化されたJSONを読み、クラスAに変換する際に、だから今
@JsonTypeInfo({
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.EXISTING_PROPERTY,
property= "type"
})
@JsonSubTypes({
@JsonSubTypes.Type(value = B.class, name = "b"),
@JsonSubTypes.Type(value = C.class, name = "c")
})
public class A {
private String type;
public void setType(String type){
this.type = type;
}
public String getType(){
return this.type;
}
}
public class B extends A {
}
public class C extends A {
}
を、私はベースのいずれかのクラスAまたはクラスBの正しいインスタンスを取得します型変数の値についてしかしここに実際の問題があります。私がこの機能を使用しようとすると、getType
私はいつもそれらのオブジェクトにnull
を取得します。私はなぜjacksonがオブジェクトの値を設定していないのかよく分かりません。
String json = "{ type: 'b' }"; // example input json
ObjectMapper om = new ObjectMapper();
A a = om.readValue(json, A.class);
// a is actually an instance of class B
a.getType()// this is null
ありがとうございます!どのように私はドキュメントでそれを逃したか分からない。 – Rajan