区分 json 中不存在字段的时间和将其值作为 null 发送的时间

Posted

技术标签:

【中文标题】区分 json 中不存在字段的时间和将其值作为 null 发送的时间【英文标题】:Differentiate between when a field is absent in a json and when its value is sent as null 【发布时间】:2018-09-22 15:24:58 【问题描述】:

传入的 JSON 被映射到一个 POJO。在某些情况下,传入的 JSON 中可能缺少此 POJO 中的字段。这些字段也可以作为空值发送。有没有办法区分何时将字段作为空值发送以及何时在 JSON 中根本不发送字段。字段的默认值为空。当字段作为 null 发送时,与在请求 JSON 中不存在时,处理是不同的。我正在使用 Spring Boot 和 Java 8。

【问题讨论】:

java/jackson Differentiate between null and unset field的可能重复 另请参阅:baeldung.com/jackson-optional 涵盖了 Optional 的使用。 @lexicore 在该示例中使用Optional 作为字段和方法参数是相当奇怪的,并且在大多数情况下是反模式。 【参考方案1】:

我不知道有什么方法可以自动配置 Jackson(或我知道的任何其他解析器)来设置一些默认值以防空值属性。

您可以做的是在 setter 方法中设置一个标志,如果该方法被调用,则可以设置该标志。仅对在输入中找到的属性调用 setter 方法。

编辑:

显然,有一种方法可以告诉杰克逊在出现空值属性的情况下该怎么做:JsonDeserializer(从ObjectMapper 调用)有一个方法getNullValue() 可以被覆盖以指定特殊值或以其他方式处理此问题案子。甚至还有一个getEmptyValue() 来处理空字符串输入值!

【讨论】:

以上是关于区分 json 中不存在字段的时间和将其值作为 null 发送的时间的主要内容,如果未能解决你的问题,请参考以下文章

@JsonIgnoreProperties转换实体时忽略json中不存在的字段

@JsonIgnoreProperties转换实体时忽略json中不存在的字段

Django中不区分大小写的字段

如何区分空值字段与杰克逊库中的缺失字段

如何过滤掉弹性搜索中不存在的字段?

CSV::MalformedCSVError: 未加引号的字段在 Ruby 中不允许 \r 或 \n