java - 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);
有任何想法吗?
解决方案
您需要使用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());
推荐阅读
- firebase - 如何在flutter web中编写音频文件并将其上传到firebase
- android - 在 AndroidView Compose 中使用样式
- ios - MSAL iOS 无法为 WKwebview 重用 Accesstoken 和 cookie
- html - 如何在 CSS 中定位元素?
- r - 如何在 R 中为每个不同的观察添加一组行
- python - 获取数据框内的特定值和位置
- flutter - Flutter 中显示变量的即时更新(更改变量值后)
- powerbi - 在 power bi 中将 SUMPRODUCT 公式创建为 dax 格式
- python - 如何将不同的数据集与日期时间索引合并?
- android - 改善 recycleView 项目之间的间距