将平面地图映射到杰克逊中的嵌套pojo [英] Mapping a flat map to a nested pojo in jackson
本文介绍了将平面地图映射到杰克逊中的嵌套pojo的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何将平面地图映射到嵌套的pojo? 我已经尝试过使用此工具,但是我在野外剑上遇到了无法识别的野外异常.
How can I map a flat map to a nested pojo? I've tried using this, however I get an unrecognized field exception on the field sword.
Map<String, Object> values = ...;
ObjectMapper mapper = new ObjectMapper();
mapper.readValue(mapper.writeValueAsString(values), Person.class);
我有这个虚拟的json:
I have this dummy json:
{
"firstName": "Arya",
"lastName": "Stark",
"gender": "Female",
"sword" : "Excalibur",
"shield": "Mighty Shield"
}
人类:
@Data
@AllArgsConstructor
public class Person {
private String firstName;
private String lastName;
private Equipment equipments;
}
和设备类别:
@Data
@AllArgsConstructor
public class Equipment {
private String sword;
private String shield;
}
推荐答案
我看到了解决此问题的方法:
I see this way to solve this problem:
public class Test {
public static void main(String[] args) {
Map<String, Object> values = new HashMap<>();
values.put("firstName", "Arya");
values.put("lastName", "Stark");
values.put("gender", "Female");
values.put("sword", "Excalibur");
values.put("shield", "Mighty Shield");
ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Person person = mapper.convertValue(values, Person.class);
person.setEquipments(mapper.convertValue(values, Equipment.class));
System.out.println(person);
}
}
当然,这不是单行反序列化,但它可以工作.结果:
Of course it is not one line deserialization but it works. Result:
Person(firstName=Arya, lastName=Stark, equipments=Equipment(sword=Excalibur, shield=Mighty Shield))
注意:Jackson必需将@NoArgsConstructor添加到您的POJO中.
Note: add @NoArgsConstructor to your POJO, it is required by Jackson.
这篇关于将平面地图映射到杰克逊中的嵌套pojo的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文