首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将JSON null反序列化为NullNode而不是Java null?

如何将JSON null反序列化为NullNode而不是Java null?
EN

Stack Overflow用户
提问于 2013-03-08 20:09:34
回答 1查看 13.3K关注 0票数 3

注: Jackson 2.1.x。

这个问题很简单,但到目前为止我还找不到解决办法。我浏览了现有的文档等,但找不到答案。

基类如下:

代码语言:javascript
复制
@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 + '"';
    }
}

有问题的类是这样的:

代码语言:javascript
复制
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;
    }
}

当我尝试反序列化时:

代码语言:javascript
复制
{ "op": "add", "path": "/x", "value": null }

我希望将null值反序列化为NullNode,而不是Java null。到目前为止,我还找不到一种方法。

你如何做到这一点呢?

(注意:所有具体类的构造函数都是带有适当@JsonProperty注释的@JsonCreator --它们工作起来没有问题,我唯一的问题是JSON处理)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-08 20:35:07

好吧,好吧,我还没有充分阅读文档,实际上它非常简单。

有一个JsonDeserializerJsonNodeDeserializer实现,您可以对其进行扩展。而且JsonDeserializer有一个.getNullValue() method

因此,定制的反序列化程序是按顺序排列的:

代码语言:javascript
复制
public final class JsonNullAwareDeserializer
    extends JsonNodeDeserializer
{
    @Override
    public JsonNode getNullValue()
    {
        return NullNode.getInstance();
    }
}

并且,在有问题的类中:

代码语言:javascript
复制
@JsonDeserialize(using = JsonNullAwareDeserializer.class)
protected final JsonNode value;
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15293697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档