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

MapStruct抽象Mapper类中@Value注入值为null如何解决

问题原因

MapStruct默认使用独立的组件模型,生成的映射器实现类会通过无参构造自行实例化,不会被注册为Spring容器中的Bean,因此Spring提供的@Value配置注入、@Autowired依赖注入能力都不会生效,类中定义的appName字段无法被赋值,运行时自然为null。

修复方案

优先使用以下配置修复,改动最小:

  1. 给@Mapper注解添加componentModel = "spring"参数,指定MapStruct生成的实现类纳入Spring容器管理:
@Mapper(componentModel = "spring")
abstract class StudentMapper {
    // 注意原代码中类名Student和业务实体类重名,建议调整为Mapper后缀命名避免混淆

    @Value("${spring.application.name}")
    String appName;

    abstract StudentModel convert(StudentDTO studentdto);

    @AfterMapping
    void postConvert(@MappingTarget StudentModel studentmodel, StudentDTO studentDTO) {
        // 原代码此处缺少语句结束分号,需补上
        studentmodel.setName(appName);
    }
}
  1. 后续使用该映射器时,不要通过Mappers.getMapper()手动获取实例,必须通过@Autowired/构造器注入的方式从Spring容器中获取,否则拿到的实例依然不受Spring管理,注入逻辑不生效。

如果项目同时使用Lombok和MapStruct,需确认pom.xml/gradle中注解处理器的配置顺序,Lombok的注解处理器需要放在MapStruct之前,避免出现注入失效的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:51:20