我正在尝试序列化/反序列化以下内容

@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的所有参数组合,但都未能成功获取类型信息以显示在文件中。我也尝试过对subType上的@JsonTypeName进行操作,但没有结果。

我唯一的猜测是我在映射器上做错了什么,但由于大多数人似乎都不希望类型信息显示在json字符串中,或​​者具有反序列化过程中的问题。

最佳答案

我确实尝试使用以下注释,即使使用了属性标记,它也可以正常工作。

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = As.PROPERTY, property = "@type")

10-07 20:29