如何在MapStruct中完全禁用自动映射?
解决MapStruct禁用自动映射、强制手动定义所有映射的问题
核心配置调整
你现有配置仅开启了未映射字段的错误检查,但并未禁用MapStruct的同名字段自动映射行为。要完全禁用自动映射,需在@Mapper注解中添加mappingControl参数,配合unmappedTargetPolicy实现强制手动映射:
@Mapper( componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.ERROR, mappingControl = MappingControl.DISABLE_AUTOMATIC_MAPPING )
配置说明
mappingControl = MappingControl.DISABLE_AUTOMATIC_MAPPING:彻底关闭MapStruct的自动映射逻辑,哪怕源和目标字段同名,也不会自动建立映射,必须通过@Mapping注解手动定义每一个映射关系。unmappedTargetPolicy = ReportingPolicy.ERROR:如果目标对象存在未被手动映射的字段,编译阶段直接抛出错误,确保所有字段都被显式定义。
额外注意事项
- 确保使用的MapStruct版本在1.5.0.Final及以上,
MappingControl是该版本才引入的特性。 - 若使用旧版本MapStruct,无法通过
MappingControl实现,可通过以下方式间接达成:- 保持
unmappedTargetPolicy = ReportingPolicy.ERROR - 对每一个同名字段,显式添加
@Mapping(source = "fieldName", target = "fieldName"),确保没有遗漏任何字段——编译时若存在未映射字段会直接报错,变相实现强制手动映射。
- 保持
内容的提问来源于stack exchange,提问作者Page not found
相关产品推荐
相关产品推荐

