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

Mapstruct uses属性失效,未调用指定Mapper处理内部字段

MapStruct uses 属性失效:自定义映射未被调用的解决方案

问题根源

  1. 集合映射的方法匹配缺失:你的RoomEntity中participant是Set<ParticipantEntity>,RoomFullDto中对应List<ParticipantDto>。MapStruct生成集合映射时,会寻找单个ParticipantEntity→ParticipantDto的映射方法,但你给ParticipantMapper的entityToDto加了@Named("EntityToData")注解,导致默认匹配规则找不到这个方法,只能自动生成基础映射逻辑。
  2. 未明确指定使用命名映射方法:即使在@Mapper(uses = ...)中引入了ParticipantMapper,如果没有在@Mapping里通过qualifiedByName指定调用哪个命名方法,MapStruct不会自动关联带@Named的方法。

解决方案

方案1:通过qualifiedByName明确指定映射方法

修改RoomMapper的映射注解,指定使用ParticipantMapper中命名为EntityToData和DataToEntity的方法,MapStruct会自动处理集合类型的转换:

@Mapper(uses = {ParticipantMapper.class})
public interface RoomMapper {

    RoomMapper INSTANCE = Mappers.getMapper(RoomMapper.class);

    @Mapping(target = "participant", source = "participant", qualifiedByName = "EntityToData")
    RoomFullDto entityToData(RoomEntity entity);

    @Mapping(target = "participant", source = "participant", qualifiedByName = "DataToEntity")
    RoomEntity dataToEntity(RoomFullDto entity);

    // 其他方法保持不变
}

方案2:移除@Named注解,让MapStruct自动匹配

如果不需要区分同名方法,可以去掉ParticipantMapper方法上的@Named注解,让MapStruct根据参数和返回值类型自动匹配单个对象的映射方法,集合映射会自动复用这些方法:

@Mapper
public interface ParticipantMapper {

    ParticipantMapper INSTANCE = Mappers.getMapper(ParticipantMapper.class);

    @Mapping(target = "room.id", source = "roomId")
    @Mapping(target = "user.id", source = "userId")
    @Mapping(target = "nicknameInRoom", source = "username")
    ParticipantEntity dtoToEntity (ParticipantDto participantDto);

    @Mapping(target = "roomId", source = "room.id")
    @Mapping(target = "userId", source = "user.id")
    @Mapping(target = "username", source = "nicknameInRoom")
    ParticipantDto entityToDto (ParticipantEntity participantDto);
}

这种情况下RoomMapper无需额外修改,uses属性会正常生效。

验证要点

  • 确保ParticipantMapper中的方法参数和返回值类型与RoomMapper中集合的泛型类型完全匹配(ParticipantEntity↔ParticipantDto)。
  • 执行mvn clean compile清理Maven缓存后重新编译,避免旧的生成代码干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:45:56