我的课程如下
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将在object中设置为null。但我得到以下例外:
com.fasterxml.jackson.databind.JsonMappingException: Missing property 'typeSpecific' for external type id 'type'
如何将上述JSON反序列化为对象?
依赖版本:
jackson-annotations:2.7.0, 杰克逊核心:2.7.4, jackson-databind:2.7.4
我尝试过最新的补丁,即2.7.9和最新版本2.8.6。但它没有用。 如果可能,请告诉我。提前谢谢。
答案 0 :(得分: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)
答案 1 :(得分:0)
尝试:
@JsonProperty
private Optional<TypeSpecific> typeSpecific;
答案 2 :(得分:0)
你可以试试这个:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.EXTERNAL_PROPERTY,
property = "type",
defaultImpl = NoClass.class)
答案 3 :(得分:0)
就我而言,具有:
@JsonTypeInfo(use = JsonTypeInfo.Id.MINIMAL_CLASS, property = "@c")
class CommonReq{};
class AReq extend CommonReq{};
在spring mvc中,使用@RequestBody AReq
来接收json http正文,我得到了类似missing subtype
这样的错误,
然后我为@JsonTypeInfo(use = JsonTypeInfo.Id.NONE)
添加了AReq
注释,终于解决了这个问题。
希望有帮助。