gpt4 book ai didi

java - 从带有 Map 的对象到带有属性的 Pojo 的 Dozer 映射

转载 作者:搜寻专家 更新时间:2023-11-01 03:51:06 24 4
gpt4 key购买 nike

我正在尝试使用 Dozer 从源到目标进行单向映射。

public class Source {
Map<String, String> values;
public Source() {
}
public Source(Map<String, String> values) {
this.values = values;
}
public Map<String, String> getValues() {
return values;
}
public void setValues(Map<String, String> values) {
this.values = values;
}
}

.

public class Destination {
private String lastname;
private String firstname;
public Destination() {
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
}

这是我的测试类:

public class DozerMapperTest {
private DozerMapper mapper = new DozerMapper();
@Test
public void testName() throws Exception {
String firstname = "Tom";
String lastname = "Hanks";
Map<String, String> input = new HashMap<>();
input.put("firstname", firstname);
input.put("lastname", lastname);
Destination result = mapper.map(new Source(input));
Assert.assertNotNull(result);
Assert.assertEquals(firstname, result.getFirstname());
Assert.assertEquals(lastname, result.getLastname());
}
}

我的映射类如下所示:

public class DozerMapper {
public DozerMapper() {
initMapper();
}
private DozerBeanMapper mapper;
public Destination map(final Source input) {
return mapper.map(input, Destination.class);
}
void initMapper() {
BeanMappingBuilder builder = new BeanMappingBuilder() {
@Override
protected void configure() {
mapping(Source.class, Destination.class, TypeMappingOptions.oneWay())
.fields(new FieldDefinition("values.lastname"), "lastname")
.fields(new FieldDefinition("values.firstname"), "firstname");
}
};
mapper = new DozerBeanMapper();
mapper.addMapping(builder);
}
}

但他的一切都不起作用:-(我也试过这个映射:

.fields(new FieldDefinition("values").mapKey("lastname"), "lastname")
.fields(new FieldDefinition("values").mapKey("firstname"), "firstname");

我用谷歌搜索,查看了文档,但一无所获。任何人都可以帮助我或给我一些提示吗?

最佳答案

在我刚刚研究之前,我自己认为这是不可能的,所以感谢您的提问!

正确的做法是这样的:

.fields("values", "firstname")
.fields("values", "lastname");

这里的关键点是 Destination 类中的变量“firstname”和“lastname”必须与 Source 类的 Map 中的键相同。否则这将不起作用。

关于java - 从带有 Map 的对象到带有属性的 Pojo 的 Dozer 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27742338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com