以下をシリアライズ/デシリアライズしようとしています
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME)
@JsonSubTypes({
@JsonSubTypes.Type(value = IdBundleCombine.class),
@JsonSubTypes.Type(value = IdBundleDistinct.class) })
public abstract class IdBundle
{
String sharedId;
Long internalId;
//getters
}
public class IdBundleCombine extends IdBundle
{
//setters
}
public class IdBundleDistinct extends IdBundle
{
//setters
}
次のコードで
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("foo.json"), someInstanceOfIdBundle);
以下を生成します(ご覧のとおり、型情報はありません):
{"sharedId":"foobar","internalId":1234}
missing property '@type' that is to contain type id
そのため、デシリアライズしようとするとエラーが発生します。
のパラメーターのすべての組み合わせを試し ましたが、ファイルに表示する型情報を取得することに成功することは@JsonTypeInfo
あり@JsonSubTypes
ませんでした。@JsonTypeName
また、結果なしで subType で再生しようとしました。
私の唯一の推測は、マッパーで何か間違ったことをしているということですが、ほとんどの人はタイプ情報がjson文字列に表示されることを望まないか、逆シリアル化プロセスの問題。