MapStruct自动忽略未映射的属性

San*_*vez 26 java mapstruct

我在我的代码中使用MapStruct与不同业务用例之间共享的大型模型(超过50个字段).根据入口点,将映射一些属性,而不映射一些属性.当我构建项目时,我将始终获得"警告:未映射的目标属性"消息.

我已经研究过并且可以通过使用语义来告诉mapstruct忽略该字段

@Mapping(target = "propName", ignore = true)
Run Code Online (Sandbox Code Playgroud)

问题是,鉴于我的对象具有如此多的字段,将需要大量代码来忽略每个映射器类中的每个单独属性.我也不希望在我的日志中出现此警告.有没有办法告诉mapstruct忽略未映射的内容,避免这条消息?

Gun*_*nar 51

您可以在@Mapper级别上设置"未映射的目标策略",也可以通过@MapperConfig在多个映射器之间共享设置:

@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface MyMapper {}
Run Code Online (Sandbox Code Playgroud)

  • 方法层面有什么相同的东西吗? (14认同)

小智 11

对于忽略自动映射 MapStruct 1.3.0.Final 参考指南:

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

@BeanMapping(ignoreByDefault = true)
OneObj map(TwoObj two);
Run Code Online (Sandbox Code Playgroud)

  • 如果可以在全局级别上进行配置,而不仅仅是在两种类型之间进行配置,那就太好了。 (2认同)