我正在使用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