JEE环境下Mapstruct Mapper中@ConfigProperty等注入属性为空如何解决
核心原因
MapStruct默认生成的Mapper实现类没有被CDI/Spring容器托管,容器不会自动识别并注入@Inject修饰的属性,因此所有注入字段都是null。
解决方案
- 给
DeclarationMapperToDomain抽象类添加@Mapper注解,指定容器托管模型:
如果你使用CDI环境(搭配DeltaSpike),配置如下:
如果你使用Spring Boot环境,将注解改为@Mapper(componentModel = "cdi") public abstract class DeclarationMapperToDomain { // 原有代码无需修改 }@Mapper(componentModel = "spring")即可。 - 调整Mapper的调用方式,禁止手动new Mapper实例,必须通过注入的方式获取实例调用方法:
// 正确用法示例 @Inject DeclarationMapperToDomain declarationMapper; // 业务代码直接调用注入实例的转换方法 Declaration domainObj = declarationMapper.declarationTransformerToDomain(uiObj); - 检查配置属性名是否匹配,确认配置文件中的
DECLARATION_TIMEZONE键名和注解里的name属性完全一致,大小写不要出错。
修改完成后重新编译项目,MapStruct会自动生成符合容器托管规范的实现类,注入的时区属性和其他Bean都会正常赋值。
内容的提问来源于stack exchange,提问作者dtchmnt
相关产品推荐
相关产品推荐

