Jackson を使用して、制御できない JSON を解析しています。JSON は次のようになります。
{
"status":"0"
"type":"type1"
"info": {
// additional fields
}
}
私のクラスは次のようになります
public class Response {
private String status;
private String type;
private Info info
}
使用する Info のサブクラスは type プロパティに依存するため、info のマッピングは次のとおりです。
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "type")
@JsonSubTypes(value = {
@JsonSubTypes.Type(value = Type1Info.class, name = "type1"),
@JsonSubTypes.Type(value = Type2Info.class, name = "type2") })
public abstract class Info {
// some fields
}
私が知る限り、区別する要素がキャストする必要がある要素と同じレベルにある場合、これは型情報を使用する正しい方法です。しかし、これは機能しません。常に同じエラーが発生します。
com.fasterxml.jackson.databind.JsonMappingException: 予期しないトークン (END_OBJECT)、予想される FIELD_NAME: タイプ ID を含むプロパティ 'type' がありません
EXTERNAL_PROPERTY を PROPERTY に変更しても、同じエラーが発生します。EXTERNAL_PROPERTY の私の理解は間違っていますか?