区分 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中不存在的字段