【问题标题】:Deserialize a property which is having null as a value using object mapper使用对象映射器反序列化具有 null 作为值的属性
【发布时间】:2021-01-29 06:30:26
【问题描述】:

我有一个已经序列化的 JSON 字符串。从源序列化时,不会忽略 null 属性值。因此,对象的序列化输出类似于:

"person": {
  "name": "foo",
  "surname": null
}

现在,如果我使用 Java 中的对象映射器进行反序列化,它会引发异常,指向不可用的值。对象映射器有什么方法可以将“姓”反序列化回“null”?我可以将对象映射器配置为在这种情况下不会失败吗?

【问题讨论】:

标签: java json jackson deserialization objectmapper


【解决方案1】:
        public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, InstantiationException, JsonProcessingException {
            Person person = new Person();
            person.name = "Hades";
            
            ObjectMapper mapper = new ObjectMapper();
            String jsonWithNull = mapper.writeValueAsString(person);
            System.out.println("Before :: "+jsonWithNull);
            
            mapper = new ObjectMapper().setSerializationInclusion(Include.NON_NULL); // U cant use the same object create a new one
            String jsonWithOutNull = mapper.writeValueAsString(person);
            System.out.println("After :: "+jsonWithOutNull);
            
            System.out.println("While deserializing");
            

            //********************
            //This is how u should read a null string into ur Java class
            Person p = mapper.readValue(jsonWithNull, Person.class);//user null string with Mapper
            System.out.println(p);
            
        }
    
    
    class Person{
        public String name;
        public String surName;
        @Override
        public String toString() {
            return "Person [name=" + name + ", surName=" + surName + "]";
        }
    }

输出

Before :: {"name":"Hades","surName":null}
After :: {"name":"Hades"}

While deserializing
Person [name=Hades, surName=null]

【讨论】:

  • 嗨@Hades,这种方法的一个问题是我无法控制源,在你的情况下是“地图”。我从外部源获取带有空值的字符串
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-20
相关资源
最近更新 更多