【问题标题】:How to identify the fields having default values when deserialized using jackson使用jackson反序列化时如何识别具有默认值的字段
【发布时间】:2014-07-24 11:26:28
【问题描述】:

我有一个 Person 类,我想使用 jackson 从 JSON 反序列化 POJO。现在, Person 类的定义类似于:

class Person {
   int id;
   String name;
   boolean isOldAge;
   boolean hasSenseOfHumor;
   .
   .
   .
}

现在我的 json 是这样的:

   {
   "id" : 1,
   "isOldAge" : false
   }

现在,当我将其反序列化为 POJO 时,我将得到的值是:

[id=1,name="",isOldAge=false,hasSenseOfHumor=false]

即 json 中未提及的属性将被分配其默认值。

所以我的问题就在这里。有没有一种方法可以区分 isOldAgehasSenseOfHumor 是否由用户提及或提供。

【问题讨论】:

  • @Stackoverflow :没有响应? :(

标签: java json serialization jackson


【解决方案1】:

尝试将原始boolean 更改为拳击Boolean 类型。然后应该使用null 值初始化这些字段。

如果您无法更改类的字段类型,则可以提前将您的 JSON 读取为映射,如下所示mapper.readValue(JSON, Map.class),然后推断结果映射实例中是否存在布尔字段。

【讨论】:

  • @Alexety :我本可以这样做,但是假设该类不是由我生成的……我得到了一个由其他人提供的类,他希望使用布尔值而不是布尔值。我可以通过创建一个动态类来更改类的属性,我可以在其中将原语更改为包装器。
  • @Sourabh 我已经更新了对此的回答。我认为如果您想获取有关该字段是否存在的信息,请将您的 JSON 读取为地图。
  • 我一直在使用相同的。这变成了开发人员的一点责任。因此,我想知道 ObjectMapper 是否有任何设置的注释或使我们能够在序列化或反序列化时为事件填充适配器或函数。
猜你喜欢
  • 2022-10-15
  • 1970-01-01
  • 1970-01-01
  • 2019-06-01
  • 2021-09-07
  • 2015-04-24
  • 2018-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多