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

是否可以告诉MapStruct不要执行自动映射?

易瀚漠
2023-03-14

我有一个相当大的bean(~100个属性),映射到几个较小的对象中。可能会出现这样的情况:较小的目标对象的属性与我的源bean中的名称相同,但语义不同。

我希望MapSTRt在这个特定的情况下只映射我使用@Map注释显式告诉的内容,而不执行通常的自动映射。

MapStruct文档告诉我:

在生成的方法实现中,源类型(…)的所有可读属性将被复制到目标类型(…)中的相应属性中。

我没有找到任何配置选项来关闭此行为。可以这样做吗?

共有3个答案

吕天逸
2023-03-14

我有一个类似的问题,就像你说的,我用装饰师解决了它

@Mapper
@DecoratedWith(PersonMapperDecorator.class)
public interface PersonMapper {...}

请参阅留档(Map结构1.2.0.最终参考指南),第12章。自定义映射

我希望这对你也有用

岑驰
2023-03-14

正如穆罕默德在评论中所说,你可以明确地忽略这些属性。

没有你描述的开关。就我个人而言,我可能会手工编写特定的映射,而不是通过注释显式地配置所有映射。当然,您仍然可以从类型转换等方面受益,所以它可能仍然是有益的,这实际上取决于您的用例。

经俊茂
2023-03-14

从MapStruct 1.3开始,可以通过@BeanMapping(ignoreByDefault=true)映射方法注释关闭隐式字段映射。从MapStruct 1.3.1参考指南:

通过@BeanMapping(ignoreByDefault=true),默认行为将是显式映射,这意味着必须通过@mapping指定所有映射,并且不会对缺少的目标属性发出警告。

 类似资料:
  • 问题内容: 我试图用谷歌搜索,但找不到方法 我有一个t-sql脚本,该脚本将新列添加到表中,然后根据该表中其他列的值填充该列,最后删除一些列。这一切都很好。 当我想再次运行脚本时,会出现问题。我有一个if子句,用于检查缺少的列是否存在,但是即使if子句中的代码未运行,SSMS仍会抱怨并显示错误消息。该脚本必须能够再运行一次,并且我不希望显示错误消息! 在代码中(显然是测试代码,不想在此处转储生产代

  • 我喜欢使用mapstruct,但我找不到:是否有一个函数将Pagable中的排序转换为映射的dto可分页到实体可分页? 链接: 可分页:https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/Pageable.html 排序:https://docs.spring.io/

  • 问题内容: 是否可以自动关闭?即,代替: …我能说......么: …在Java 7中? 问题答案: 不,该接口(也不是该类)都未实现该接口,而新的try- with-resource语法必须使用该接口。 如果您想使其工作,可以编写一个简单的包装器: 现在您可以编写如下代码: 我认为您最好还是坚持使用旧语法。使锁定逻辑完全可见是更安全的。

  • 我最近学习了MapStruct,我真的很喜欢它的工作方式。由于我是MapStruct新手,如果这个问题很愚蠢或没有什么意义,我提前道歉。 由于服务器版本的原因,我被绑定到Java6。 我有3种类型的实体A、B和C,以及它们的DTO对应体。 我的映射器定义: 现在还行。 无法为泛型类型变量目标生成映射方法 谢谢。

  • 问题内容: 有没有办法告诉Linux,它不应该将特定进程的内存换出到磁盘上? 它是一个Java应用程序,因此理想情况下,我希望从命令行中找到一种方法。 我知道您可以将全局swappiness设置为0,但这明智吗? 问题答案: 您可以通过Linux下的mlockall(2)系统调用来完成此操作。这将在整个过程中起作用,但是请务必阅读您需要传递的参数。 您是否真的需要将整个过程置于核心?如果它是一个J

  • 问题内容: 是否有可能以某种方式停止或终止JavaScript,从而防止再次发生基于JavaScript的执行,而无需重新加载浏览器? 我在想JavaScript等同于PHP。 问题答案: 简短答案: 如果您想了解更多,请继续阅读。 您是否要停止JavaScript的开发/调试工作? 代码中的表达式将停止页面执行,然后您的浏览器开发人员工具将使您可以查看页面冻结时的状态。 您是否要故意停止设计您的