我试图将Java Map映射到POJO,但是在使用Orika时遇到问题。
我有一个LinkedHashMap,并尝试将其映射到POJO。我正在阅读此网站https://www.baeldung.com/orika-mapping,特别是第4.2节
这就是我定义orika映射器的方式:
factory.classMap(Map.class, TestDto.class)
.field("nest['name']", "name")
.toClassMap();
这是我要映射的LinkedHashMap:
Map<Object, Object> nest = new LinkedHashMap<>();
nest.put("name", "myname");
Map<Object, Object> obj = new LinkedHashMap<>();
obj.put("nest", nest);
这是我要映射到的POJO:
public class TestDto {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
当我这样做:
TestDto testDto = mapper.map(obj, TestDto.class);
我的名字为null。是否可以绘制此方案,或者我必须对orika进行更多自定义?
答案 0 :(得分:0)
是的,该映射的名称将返回null。
TestDto testDto = mapper.map(obj, TestDto.class);
这是由于TestDto类中的变量名不包含变量名nest。
使用其他键映射您的POJO。 请在您的get()方法中添加@JsonProperty。
示例:
@JsonProperty("nest")
public String getName() { return name; }
答案 1 :(得分:0)
我知道了,您可以定义一个映射器,例如:
factory.classMap(Map.class, TestDto.class)
.field("nest:{get('nest')|type=Map}.name:{get('name')|type=java.lang.String}", "name")
.toClassMap();
在这里概述: https://orika-mapper.github.io/orika-docs/advanced-mappings.html
仅当您无法控制Pojo和/或不想复制Pojo时,才真正需要