You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JEE环境下Mapstruct Mapper中@ConfigProperty等注入属性为空如何解决

核心原因

MapStruct默认生成的Mapper实现类没有被CDI/Spring容器托管,容器不会自动识别并注入@Inject修饰的属性,因此所有注入字段都是null。

解决方案

  • 给DeclarationMapperToDomain抽象类添加@Mapper注解,指定容器托管模型:
    如果你使用CDI环境(搭配DeltaSpike),配置如下:
    @Mapper(componentModel = "cdi")
    public abstract class DeclarationMapperToDomain {
        // 原有代码无需修改
    }
    
    如果你使用Spring Boot环境,将注解改为@Mapper(componentModel = "spring")即可。
  • 调整Mapper的调用方式,禁止手动new Mapper实例,必须通过注入的方式获取实例调用方法:
    // 正确用法示例
    @Inject
    DeclarationMapperToDomain declarationMapper;
    
    // 业务代码直接调用注入实例的转换方法
    Declaration domainObj = declarationMapper.declarationTransformerToDomain(uiObj);
    
  • 检查配置属性名是否匹配,确认配置文件中的DECLARATION_TIMEZONE键名和注解里的name属性完全一致,大小写不要出错。

修改完成后重新编译项目,MapStruct会自动生成符合容器托管规范的实现类,注入的时区属性和其他Bean都会正常赋值。

内容的提问来源于stack exchange,提问作者dtchmnt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 20:36:01