我为Jackson编写了针对特定领域的自定义解串器(如下)。我将其与以下注释一起使用:
@JsonDeserialize(using = TokenTypeDeserializer.class)
TokenType type;
只要我在该字段中传递一个值,它似乎就可以正常工作。当我开始测试它时,我将null
值作为字段传递给了。在这种情况下,它忽略了我的自定义反序列化器,将其跳过并仅将其null
作为值。这是一个问题,因为当我进入null
该领域时,我有独特的行动方式。
当值为时,如何强制它通过我的自定义反序列化器null
?
这是我写的自定义反序列化器:
public static class TokenTypeDeserializer extends StdDeserializer<TokenType> {
public TokenTypeDeserializer() {
this(null);
}
protected TokenTypeDeserializer(Class<?> vc) {
super(vc);
}
@Override
public TokenType deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
ObjectCodec oc = p.getCodec();
JsonNode node = oc.readTree(p);
String type = node.asText();
TokenType tokenType = TokenType.getTokenTypeFromString(type);
return tokenType;
}
}
我看了一下ObjectMapper代码,看到了:
public final Object deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException
{
JsonToken t = jp.getCurrentToken();
if (t == JsonToken.VALUE_NULL) {
return (_nullProvider == null) ? null : _nullProvider.nullValue(ctxt);
}
if (_valueTypeDeserializer != null) {
return _valueDeserializer.deserializeWithType(jp, ctxt, _valueTypeDeserializer);
}
return _valueDeserializer.deserialize(jp, ctxt);
}
似乎ObjectMapper首先检查该值是否为null,如果是,则返回默认值。关于如何使其通过我的反序列化器的任何想法?
根据本讨论,您似乎无法提供null的替代方法,除非它是原始类型(不能为null)。
总而言之,这是一种常见的行为,如果要将null值反序列化为可为null的类型,则null是应该到达的值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句