当前使用模型映射器将LinkedHashMap的某些字段映射到DTO。经过回答Customize modelMapper之后,我们了解到模型Mapper使用modelMapper的map()方法为要映射的每个有序类型对创建一个TypeMap。
请考虑以下课程:
class A {
private String name;
// Getters and setters here
}
在另一堂课中,尝试了以下方法:
Class C {
public void mapEntities() {
ModelMapper modelMapper = new ModelMapper();
Map<String, Object> map = new LinkedHashmap<>();
map.put("name", "b");
A a = new A();
modelMapper.map(map, a);
System.out.println(a.getName);
TypeMap<A, B> typeMap = modelMapper.getTypeMap(LinkedHashMap.class, A.class)
typeMap.getMappings().forEach(System.out::println);
}
}
b
PropertyMapping [name-> A.name]
这似乎可以确认已经为该对创建了一个TypeMap(LinkedHashMap.class,A.class),并且包含了一个如预期的单个propertyMap。而且映射也已完成。
在这种情况下,类A包含一个额外的字段,如下所示:
Class A {
private String name;
private String details;
// Getters and setters here
}
在A类中添加的字段尝试了相同的操作时:
Class C {
public void mapEntities() {
ModelMapper modelMapper = new ModelMapper();
Map<String, Object> map = new LinkedHashmap<>();
map.put("name", "b");
A a = new A();
modelMapper.map(map, a);
System.out.println(a.getName);
TypeMap<A, B> typeMap = modelMapper.getTypeMap(LinkedHashMap.class, A.class)
typeMap.getMappings().forEach(System.out::println);
}
}
但是,这会引发 null指针异常,因为typeMap返回为null。 那么,为什么该对的typeMap(LinkedHashMap,A)返回为null?
此外,在检查对象a时,映射已经起作用,a.getName()返回b。
使用modelMapper非常陌生,是这里遗漏了一些东西,还是对为model.map()方法中使用的每对对象创建typeMap的理解是错误的?