gpt4 book ai didi

java - jackson 杰森映射器 : no field or empty field?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:02:12 28 4
gpt4 key购买 nike

我使用 Jackson Json Mapper 在我的服务器上解析查询。

例如,我正在等待适合类 My_class 的查询:

class My_class {
String a;
String b;
}

我以这种方式反序列化查询:

public <T> T Deserialize(String json, Class<T> type) throws DeserializationException {
if (json == null || type == null) {
throw new IllegalArgumentException();
}
try {
return objectMapper.readValue(json, type);
} catch (JsonParseException e) {
throw new DeserializationException(e);
} catch (org.codehaus.jackson.map.JsonMappingException e) {
throw new DeserializationException(e);
} catch (IOException e) {
throw new DeserializationException(e);
}
}

这里有两个示例查询:

{"a":"test"}
{"a":"test", "b":null}

问题是我想知道什么时候用户向我发送了仅包含字段 a 的查询以及何时发送了字段 b 设置为 的查询空。在这两种情况下,映射器都将字段 b 标记为 null

执行此操作的更好方法是什么(并避免编写我自己的反序列化器)?

最佳答案

您可以使用方法isNull()检查 JsonNode 是否是一个 null 文字。

boolean isNull()

Method that can be used to check if this node was created from JSON literal null value.

还有isMissingNode() , 这似乎有类似的目的。如果该节点实际上不存在于 JSON 文档中,它应该返回 true。这种方法很有用,例如如果您想为未明确设置的属性使用默认值。

boolean isMissingNode()

Method that returns true for "virtual" nodes which represent missing entries constructed by path accessor methods when there is no actual node matching given criteria.


在我看来,您应该避免构建依赖于 nullmissing 节点之间差异的东西。您实际上是在向反序列化的 JSON 添加某种额外的数据类型:大多数 JSON API 在这两种情况下都返回 null,而现在您有 null literal缺少节点,这不是常见的做法。这很令人困惑,并且可能会导致您的 API 出现问题,因为客户端需要做额外的工作来配置其序列化程序以区分这两种状态。可能并非所有 JSON 库都支持它。

关于java - jackson 杰森映射器 : no field or empty field?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18828362/

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