当前位置: 首页 > 知识库问答 >
问题:

使用对象映射器反序列化以null为值的属性

楚勇
2023-03-14

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

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

现在,如果我在Java中使用对象映射器反序列化上面的内容,它会抛出一个异常,指向value not Available。对象映射器是否可以将“姓氏”反序列化回“null”?我可以配置对象映射器在这种情况下不会失败吗?

共有1个答案

孟建木
2023-03-14
        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]
 类似资料:
  • 如何将jackson JSON映射器与Java 8 LocalDateTime一起使用? JSONMappingException:无法从JSON字符串实例化类型[simple type,class java.time.LocalDateTime]的值;没有单字符串构造函数/工厂方法(通过引用链:mydto[“field1”]->subdto[“date”])

  • 我被要求更改jackson映射配置,以便我们(从JSON)反序列化的每个空对象都将被反序列化为NULL。 因此,对于像或这样的json,我希望在java中转换为(而不是空字符串或实例)。

  • 我需要一个自定义反序列化器来在复杂的POJO中转换字符串。反序列化工作直到使用反序列化器:特别是使用自定义反序列化器时,我的对象的非对象属性不会序列化。 我有一个restful Web服务,它有一个pojo作为参数。 所以我的类PreentivoWs需要一个方法。这里是类定义: 在jsonObject中,我有一个枚举定义为 但此对象需要转换反序列化程序: 并在财产上标注: fromString方法

  • 我试图使用Jackson将JSON反序列化为Java POJO。在不泄露机密信息的情况下,以下是ObjectMapper反序列化失败时的堆栈跟踪示例: 枚举类型如下所示: 我确实意识到我试图反序列化一个空值。但我认为这仍然有效:反序列化的结果应该等同于具有的映射,这确实是一个有效的Java指令。非常感谢帮助,提前感谢。

  • 我对Jackson有一个错误的理解,就是将json文件反序列化为poco。这是我的代码: 我的POCO命名为AnimalBean: }还有我的JSON文件: } 当我执行我的代码时,我有以下错误:未识别的字段“动物园”(类动画豆),未标记为可忽略的。我知道问题是我的json文件开始不直接由动物,但我不能改变它,因为它不是我的。我已经尝试把对象apper.configure(Deseriazatio