gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:50:52 26 4
gpt4 key购买 nike

注意: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 空值处理)

最佳答案

好的,好吧,我没有看够文档,其实很简单。

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

因此,定制反序列化器是有序的:

public final class JsonNullAwareDeserializer
extends JsonNodeDeserializer
{
@Override
public JsonNode getNullValue()
{
return NullNode.getInstance();
}
}

并且,在有问题的类中:

@JsonDeserialize(using = JsonNullAwareDeserializer.class)
protected final JsonNode value;

关于java - 如何将 JSON null 反序列化为 NullNode 而不是 Java null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15293697/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com