注: Jackson 2.1.x。
这个问题很简单,但到目前为止我还找不到解决办法。我浏览了现有的文档等,但找不到答案。
基类如下:
@JsonTypeInfo(use = Id.NAME, include = As.PROPERTY, property = "op")
@JsonSubTypes({
@Type(name = "add", value = AddOperation.class),
@Type(name = "copy", value = CopyOperation.class),
@Type(name = "move", value = MoveOperation.class),
@Type(name = "remove", value = RemoveOperation.class),
@Type(name = "replace", value = ReplaceOperation.class),
@Type(name = "test", value = TestOperation.class)
})
public abstract class JsonPatchOperation
{
/*
* Note: no need for a custom deserializer, Jackson will try and find a
* constructor with a single string argument and use it
*/
protected final JsonPointer path;
protected JsonPatchOperation(final JsonPointer path)
{
this.path = path;
}
public abstract JsonNode apply(final JsonNode node)
throws JsonPatchException;
@Override
public String toString()
{
return "path = \"" + path + '"';
}
}有问题的类是这样的:
public abstract class PathValueOperation
extends JsonPatchOperation
{
protected final JsonNode value;
protected PathValueOperation(final JsonPointer path, final JsonNode value)
{
super(path);
this.value = value.deepCopy();
}
@Override
public String toString()
{
return super.toString() + ", value = " + value;
}
}当我尝试反序列化时:
{ "op": "add", "path": "/x", "value": null }我希望将null值反序列化为NullNode,而不是Java null。到目前为止,我还找不到一种方法。
你如何做到这一点呢?
(注意:所有具体类的构造函数都是带有适当@JsonProperty注释的@JsonCreator --它们工作起来没有问题,我唯一的问题是JSON处理)
发布于 2013-03-08 20:35:07
好吧,好吧,我还没有充分阅读文档,实际上它非常简单。
有一个JsonDeserializer的JsonNodeDeserializer实现,您可以对其进行扩展。而且JsonDeserializer有一个.getNullValue() method。
因此,定制的反序列化程序是按顺序排列的:
public final class JsonNullAwareDeserializer
extends JsonNodeDeserializer
{
@Override
public JsonNode getNullValue()
{
return NullNode.getInstance();
}
}并且,在有问题的类中:
@JsonDeserialize(using = JsonNullAwareDeserializer.class)
protected final JsonNode value;https://stackoverflow.com/questions/15293697
复制相似问题