代码之家  ›  专栏  ›  技术社区  ›  italktothewind

带Spring的ModelMapper,在哪里放置显式映射?

  •  2
  • italktothewind  · 技术社区  · 6 年前

    @Autowired
    private ModelMapper mapper;
    

    我想在控制器方法中的模型类和DTO之间进行显式映射,例如:

    modelMapper.addMappings(mapper -> {
      mapper.map(src -> src.getBillingAddress().getStreet(),
          Destination::setBillingStreet);
      mapper.map(src -> src.getBillingAddress().getCity(),
          Destination::setBillingCity);
    });
    

    然后使用映射器映射类。

    我的问题是,在每个控制器方法调用中添加显式映射是否正确?对象模型映射器的内存大小会开始增长吗?

    另一种解决方案是在创建ModelMapperbean时只添加一次映射,但我认为在bean配置中放置映射逻辑不是一个好的决定。

    1 回复  |  直到 6 年前
        1
  •  4
  •   Hero Wanders    6 年前

    在的bean配置中设置映射逻辑是完全正确的 ModelMapper . 映射是该类的实际任务,因此应该在创建时对其进行配置。

    不过,我更喜欢创建多个专用映射器定义,每个类型或相关类型组一个。

    实际上,在每个控制器中配置映射器将违反DRY(不要重复)和SoC(分离关注点)等原则。

    在你的情况下(单身汉) )你可以创造 @Configuration 在这个班级里你会得到 模型映射器 并添加类型映射。

    • 模型映射器
    • @PostConstruct -访问 @Autowired

    我没用过 模型映射器 但在浏览了它的代码库之后,我猜如果您遵循您最初的方法,内存使用量不会增加,但是您会发现抛出重复映射的异常。