当前位置: 首页 > 知识库问答 >
问题:

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

夹谷琨
2023-03-14

我将ModelMapper与Spring一起使用。在我的控制器类中,我正在自动连接ModelMapper bean:

@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个答案

吴西岭
2023-03-14

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

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

这样做可以将配置方面与控制器中映射器的实际使用分开,而不会在一个类中创建大量不相关的映射配置代码。实际上,在每个控制器中配置映射器将违反DRY(不要重复)和SoC(关注点分离)等原则。

在您的情况下(singletonModelMapper),您可以为要映射的每个类型或类型组创建带注释的类。在该类中,您将收到ModelMapper,并添加类型映射。将配置代码添加到

  • 一个ModelMapper-接收构造函数或
  • 一个带注释的方法,用于访问ModelMapper属性。

我自己还没有使用过ModelMapper,但是在查看了它的代码库之后,我想如果您按照最初的方法,内存使用不会增加,但是您会发现抛出重复映射的异常。

 类似资料:
  • 为了编写所需的最少代码量,我尝试让ModelMapper生成其隐式映射,并且只为那些无法自动映射的属性编写显式属性映射。 如果我让ModelMapper使用以下命令生成隐式映射: 它抱怨具有多个可能的映射。然后,我尝试使用以下方法修复该问题: 然而,我发现ModelMapper仍在抱怨,因为实际上在上抛出了一个异常,所以它没有机会访问我的自定义映射代码。 如果我反转这两个语句,我会得到一个错误:

  • 我想知道什么是最好的地方将一个Spring引导应用程序注册额外的bean。我有一个主类,它用进行了注释,并且在该类中定义的bean被取走。但是当我把这些bean放到另一个类中时,它似乎没有被注册。 在阅读文档时,我想到将隐式搜索其中包含注释的类。 所以我现在的选择是: > 将所有带注释的bean放在我的主类中 有更好的方法吗?

  • 我正在尝试运行Phusion Passenger,这是我得到的最远的。当它在网站上加载时,它就出现了 需要“rails/all”。。。0.550s捆扎机。要求1.510s[已弃用]I18n。enforce\u available\u locales将来将默认为true。如果确实要跳过区域设置的验证,可以设置I18n。强制\u available\u locales=false以避免此消息。应用初始

  • 问题内容: 我对ES文档感到困惑,实际上,它们在这里指出索引必须位于映射目录(和indexname子目录)中: 可以在名为[mapping_name] .json的文件中定义映射,并将其放置在config / mappings / _default位置下或config / mappings / [index_name]下(对于仅应与特定索引关联的映射)。 但后来这里的“配置”一节中,它指出: 索引

  • 问题内容: 我的项目是这样的: 有人可以告诉我将hibernate.cfg.xml放在哪里吗? 因为出现此错误: 问题答案: 配置文件必须位于上。 根据您的项目,这可以通过不同的方式来完成。 对于 Web应用程序WAR 项目(您正在Servlet容器中运行程序):当应用程序在容器中运行时,将其放入将在类路径上可见的文件中起作用。 对于 Maven的 风格的项目(在Servlet容器没有运行该程序)

  • 第一部分 我使用JavaModelMapper库(http://modelmapper.org/)来管理我的实体和DTO之间的映射。我有一个联系人(实体)和一个联系人视图(DTO)。我有一个字符串字段在接触中不存在的联系人称为"类型"。它的值应该只是实体子类的名称。我尝试过这样做这个自定义映射: 我在:mapper处得到一个编译错误。地图(src)- 定义了非法的SourceGetter 组织上有