将平面地图映射到杰克逊中的嵌套pojo [英] Mapping a flat map to a nested pojo in jackson

查看:76
本文介绍了将平面地图映射到杰克逊中的嵌套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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆