0

我有如下课程

class XYZ {
    private String type;

    private TypeSpecific typeSpecific;

    public TypeSpecific getTypeSpecific() {
        return typeSpecific;
    }

    @JsonTypeInfo(
        use = JsonTypeInfo.Id.NAME, 
        include = JsonTypeInfo.As.EXTERNAL_PROPERTY, 
        property = "type"           
        )
    @JsonSubTypes({     
        @JsonSubTypes.Type(value = ATypeSpecific.class, name = "a")
    })
    public void setTypeSpecific(TypeSpecific typeSpecific) {
       this.typeSpecific = typeSpecific;
    }
}

ATypeSpecific 类扩展了 TypeSpecific。

我想反序列化 JSON {"type":"b"} ,其中 typeSpecific 将在对象中设置为 null。但我得到以下异常:

com.fasterxml.jackson.databind.JsonMappingException: Missing property 'typeSpecific' for external type id 'type'

如何将上述 JSON 反序列化为对象?

依赖版本:

杰克逊注释:2.7.0,杰克逊核心:2.7.4,杰克逊数据绑定:2.7.4

我尝试过最新的补丁,即 2.7.9 和最新版本 2.8.6。但它不起作用。请让我知道这是否可能。提前致谢。

4

4 回答 4

1

就我而言,具有:

@JsonTypeInfo(use = JsonTypeInfo.Id.MINIMAL_CLASS, property = "@c")
class CommonReq{};

class AReq extend CommonReq{};

在 spring mvc 中,用于@RequestBody AReq接收 json http body,我得到了这个错误missing subtype

我添加@JsonTypeInfo(use = JsonTypeInfo.Id.NONE)了注释AReq,终于解决了这个问题。

希望能帮助到你。

于 2018-11-09T06:33:31.650 回答
0

您需要设置以下属性以使其运行:

// for version 1.x       
mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// for newer versions
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) 
于 2017-04-07T07:06:22.563 回答
0

尝试:

@JsonProperty
private Optional<TypeSpecific> typeSpecific;
于 2017-04-07T07:07:58.293 回答
0

你可以试试这个:

@JsonTypeInfo(
        use = JsonTypeInfo.Id.NAME,
        include = JsonTypeInfo.As.EXTERNAL_PROPERTY,
        property = "type",
        defaultImpl = NoClass.class)
于 2017-04-07T07:11:23.530 回答