【问题标题】:How to convert a map to a entity object in java?如何在java中将地图转换为实体对象?
【发布时间】:2021-06-19 17:28:05
【问题描述】:

我有一个这样的实体对象:

class Person{
 private String name;
 private String class;
 private String semester;
}

现在我有一张这样的地图:Map<String,String>

{
   "name":"Giri"
   "class":"12"
   "semester":"C"
}

现在我想将此映射转换为 Person 对象,其中对象中的每个字段都对应于映射中的该字段。

我该怎么做?

谢谢

【问题讨论】:

    标签: java spring-boot class spring-mvc hashmap


    【解决方案1】:

    您可以为此编写自定义映射器。

    toPerson(Map<String, String> map) {
        if(map == null) {
            return null;
        }
        Person person = new Person();
        person.setName = map.get("name");
        person.setClass = map.get("class");
        person.setSemester = map.get("semester");
        return person;
    }
    

    或者你可以使用jackson convertValue()

    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    Person person = mapper.convertValue(map, Person.class);
    

    除了jackson的ObjectMapper还有DozerBeanMapper,BeanUtils,google的Gson也可以做同样的事情。

    【讨论】:

    • 感谢您的详细回答,但有一个疑问,如果人对象中存在的字段在地图中不可用怎么办?是否设置了默认值?
    • Yes 默认值,根据数据类型,int = 0,boolean = false。如果地图中有未知属性,则必须添加 objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    • 但是如果您在这种情况下编写自定义映射器,如果地图中没有属性,它将被分配空值或取决于您的实现。
    • 是的,前提是您编写自定义实现。
    • 感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2021-12-22
    • 1970-01-01
    • 2015-07-18
    • 2012-10-25
    • 1970-01-01
    相关资源
    最近更新 更多