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

MapStruct映射报错:参数类无对应属性问题排查求助

错误原因及解决方案

核心错误原因

这些编译错误的根源是MapStruct的@Mapping注解中source属性的写法错误。

当映射方法仅接收单个参数时,你不需要在source里添加参数名前缀(比如reqDto.或anime.),直接写属性名即可。MapStruct会自动从唯一的参数对象中读取对应属性。你当前的写法source = "reqDto.id",相当于告诉MapStruct从参数reqDto的reqDto属性里取id,但你的AnimePostReqDto类根本没有名为reqDto的属性,自然会报“找不到属性”的错误,anime.id同理。

修正后的Mapper代码

因为你的Model和DTO属性名完全一致,甚至可以省略所有@Mapping注解,MapStruct会自动完成映射:

import br.edu.devdojo2.app.dto.AnimePostReqDto;
import br.edu.devdojo2.app.dto.AnimeRespDto;
import br.edu.devdojo2.app.model.Anime;
import org.mapstruct.Mapper;

@Mapper(componentModel = "spring")
public interface AnimeMapper {
    Anime toModel(AnimePostReqDto reqDto);
    AnimeRespDto toRespDto(Anime anime);
}

如果需要显式声明映射(比如后续属性名不一致时),只需去掉参数名前缀:

@Mapper(componentModel = "spring")
public interface AnimeMapper {
    @Mapping(source = "id", target = "id")
    @Mapping(source = "name", target = "name")
    Anime toModel(AnimePostReqDto reqDto);

    @Mapping(source = "id", target = "id")
    @Mapping(source = "name", target = "name")
    AnimeRespDto toRespDto(Anime anime);
}

额外注意事项

确保项目已正确配置Lombok编译插件(比如Maven的lombok-maven-plugin或Gradle的Lombok插件),因为MapStruct在编译时依赖Lombok生成的getter方法,配置不当也可能引发类似“找不到属性”的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:07:47