如何使用MapStruct实现仅映射指定字段的配置?
实现MapStruct仅映射明确指定的字段
嘿,刚好我之前也碰到过这个需求——不想一个个加ignore来排除字段,而是让MapStruct只处理我明确标注的映射规则,彻底关掉默认的同名自动映射。其实用MapStruct自带的配置就能轻松搞定,完全不用折腾自定义策略类。
核心方案:用@BeanMapping(ignoreByDefault = true)关闭默认映射
只需要在你的映射方法上加上这个注解,就能让MapStruct默认忽略所有字段的自动匹配,之后你只需要把需要映射的字段用@Mapping一一标注出来就行。
代码示例
先定义你的源类和目标类:
// 源对象 public class Source { private Long id; private String name; private String unusedField; // 这个字段我们不想映射 } // 目标对象 public class Target { private Long id; private String name; private String extraField; // 这个字段也不需要被赋值 }
然后编写Mapper接口:
@Mapper(componentModel = "spring") // 按需选择组件模型,比如spring、cdi等 public interface SourceTargetMapper { // 关键:ignoreByDefault = true 关闭默认同名映射 @BeanMapping(ignoreByDefault = true) // 只明确指定需要映射的字段 @Mapping(target = "id", source = "id") @Mapping(target = "name", source = "name") Target convertToTarget(Source source); }
效果说明
这样配置后,MapStruct只会生成id和name的映射代码,其他所有未被@Mapping标注的字段都会被自动忽略,完全符合你想要的“仅映射指定字段”的策略。之后如果需要新增映射字段,只需要添加对应的@Mapping注解即可,比一个个加ignore高效太多。
内容的提问来源于stack exchange,提问作者Naveen
相关产品推荐
相关产品推荐

