如何在Java中将地图转换为实体对象?

3

I have a entity object like this:

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

现在我有这样一个地图:Map<String,String>
{
   "name":"Giri"
   "class":"12"
   "semester":"C"
}

现在我想将这张地图转换为一个Person对象,其中对象中的每个字段对应于地图中的那个字段。
我该怎么做呢?
谢谢。
1个回答

7

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

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来实现相同的目的。


感谢您详细的回答,只有一个疑问,如果在人物对象中存在的字段在映射中不可用,会有默认值吗? - undefined
根据数据类型,是的默认值为:int = 0,boolean = false。如果在映射中有未知属性,则需要添加objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)。 - undefined
但是如果你在这种情况下编写自定义映射器,如果属性在映射中不存在,它将被赋予空值或取决于你的实现方式。 - undefined
是的,只有在您编写自定义实现时才返回翻译后的文本。 - undefined
这个链接也许对你有所帮助,它是一个旧的帖子,只有少数答案被批准... https://dev59.com/gWQn5IYBdhLWcg3w9bGi - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接