GetTypeMap返回LinkedHashMap到DTO映射的Null

时间:2019-08-10 23:04:33

标签: java modelmapper

当前使用模型映射器将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的理解是错误的?

0 个答案:

没有答案