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
相关产品推荐
相关产品推荐

