我正在使用Jackson反序列化一些JSON,并且在尝试对其中一个字段使用自定义反序列化器时遇到了一些麻烦。使用Jackson的JSON字段的自定义反序列化
class MyClass
{
private static class SpecialPropertyDeserializer extends JsonDeserializer<SpecialProperty>
{
@Override
public SpecialProperty deserialize(JsonParser jsonParser,
DeserializationContext deserializationContext) throws IOException, JsonProcessingException
{
// do some custom deserialisation
}
}
private static class SpecialProperty
{
private String m_foo;
private String m_bar;
@JsonCreator
SpecialProperty(@JsonProperty("foo") String foo,
@JsonProperty("bar") String bar)
{
m_foo = foo;
m_bar = bar;
}
}
private String m_identifier;
private String m_version;
@JsonDeserialize(using = SpecialPropertyDeseializer.class)
private SpecialProperty m_specialProperty;
@JsonCreator
MyClass(@JsonProperty("identifier") String identifier,
@JsonProperty("version") String version,
@JsonProperty("specialProperty") SpecialProperty specialProperty)
{
m_identifier = identifier;
m_version = version;
m_specialProperty = specialProperty;
}
}
,这是我想反序列化JSON:
{
"identifier" : "some-id",
"version" : "1.7",
"specialProperty" : {
"foo" : "str1",
"bar" : "str2"
},
}
我调用映射如下:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
return objectMapper.readValue(input, MyClass.class);
我观察到以下行为:
- 没有一个特殊的属性,它一切正常 - 即删除所有 引用来自代码和JSON的
SpecialProperty
。 - 如果我在JSON中包含
SpecialProperty
,但删除自定义 解串器,那么它也可以正常工作。调用SpecialProperty
的ctor。 - 使用自定义解串器它不起作用。调用
SpecialProperty
的ctor被调用,但是自定义解串器没有。
我在做什么错?
您的specialProperty是否是对象?如果是,那么它是什么样的? –
这是一个对象,是的。它由'SpecialProperty'类表示。 – ksl