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

Mapstruct编译报错找不到source属性roleIds的原因及解决方法

问题原因

  1. 注解处理器执行顺序不兼容:你当前使用的MapStruct 1.4.1.Final版本与Lombok的注解处理器默认执行顺序冲突,MapStruct扫描类属性时,Lombok还未完成UserFilterDto类的getter/setter方法生成,导致MapStruct无法识别roleIds属性。
  2. RoleMapper存在语法错误:你贴出的RoleMapper代码末尾多了一个多余的闭合花括号},会导致类编译异常,也可能影响MapStruct的依赖扫描。
  3. (可选触发项)若UserFilter类与UserMapper不在同一个包下,你定义的UserFilter没有加public修饰符,会导致MapStruct无法访问该类的属性。

修复方案

步骤1:修复RoleMapper语法错误

修正后的RoleMapper代码如下:

@Mapper
public interface RoleMapper {
    default List<Role> roleIdListToRoleList(List<Long> roleIds) {
        return Objects.isNull(roleIds)
                ? Lists.newArrayList()
                : roleIds.stream().map(id -> Role.builder().id(id).build()).collect(Collectors.toList());
    }
}

步骤2:新增Lombok与MapStruct的绑定依赖

在pom.xml的maven-compiler-plugin的annotationProcessorPaths中加入lombok-mapstruct-binding依赖,协调两个注解处理器的执行顺序,调整后的配置如下:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>11</source>
        <target>11</target>
        <annotationProcessorPaths>
            <path>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>${mapstruct.version}</version>
            </path>
            <path>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </path>
            <!-- 新增绑定依赖 -->
            <path>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok-mapstruct-binding</artifactId>
                <version>0.2.0</version>
            </path>
        </annotationProcessorPaths>
        <compilerArgs>
            <compilerArg>-Amapstruct.defaultComponentModel=spring</compilerArg>
        </compilerArgs>
    </configuration>
</plugin>

步骤3:(可选)升级MapStruct版本

将pom.xml中的mapstruct.version升级到1.5.5.Final及以上,新版本对Lombok的适配性更好,可减少兼容问题。

步骤4:(可选)修正UserFilter的访问权限

若UserFilter和UserMapper不在同一包下,给UserFilter添加public修饰符:

@Data
@Builder
public class UserFilter {
    private String username;
    private Boolean isEnabled;
    private List<Role> roles;
}

完成以上修改后,执行mvn clean compile重新编译即可生成符合预期的Mapper实现代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 10:24:03