首页 > 解决方案 > Jackson ObjectMapper 多态反序列化

问题描述

我似乎无法弄清楚如何反序列化我的 Java 对象,我有以下内容:

class Person {
    public String name;
    public int age;
    public PhoneNumber phone;
}

class PhoneNumber {
    public int areaCode;
    public int local;
}

我想要实现的是:

{ 
"name" : null,
 "age" : null,
 "phone" : {
     "areaCode" : null,
     "local" : null
  }
}

我试图通过以下方式实现这一目标的代码:

ObjectMapper objectMapper = new ObjectMapper();
PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder().build();
objectMapper.activateDefaultTyping(ptv);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

Person person = new Person()
String value = objectMapper.writeValueAsString(person);

有任何想法吗?

标签: javajsonjackson

解决方案


您需要使用Integer而不是int,并且您需要初始化电话号码。

class Person {
    public String name;
    public Integer age;
    public PhoneNumber phone = new PhoneNumber();
}

class PhoneNumber {
    public Integer areaCode;
    public Integer local;
}

对象映射器将生成预期的 JSON。

objectMapper.writeValueAsString(new Person());

推荐阅读