如何使用Orika将Java映射映射到对象

时间:2019-07-18 01:44:31

标签: java orika

我试图将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进行更多自定义?

2 个答案:

答案 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时,才真正需要