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

如何使用MapStruct将包含User属性的UserHolder转换为User?

用MapStruct将UserHolder转换为User的正确姿势

嘿,我来帮你搞定这个映射问题!针对你给出的User和UserHolder类,其实有两种简洁的方式实现转换,下面给你详细说明:

方式一:直接映射嵌套的User属性(最简洁)

因为你的目标类型就是User,而UserHolder刚好持有一个User类型的属性user,MapStruct可以直接帮你完成这个赋值,不需要逐个字段写映射:

@Mapper(componentModel = "spring")
public interface UserHolderMapper {

    // 直接将UserHolder的user属性映射到目标User对象
    User userHolderToUser(UserHolder userHolder);
}

MapStruct会自动识别到UserHolder里的getUser()方法,然后把返回的User实例直接作为转换后的结果,这种方式最省心!

方式二:显式指定每个字段的映射(适合需要自定义的场景)

如果你需要对某些字段做特殊处理,或者想明确写出映射关系,也可以逐个指定@Mapping:

@Mapper(componentModel = "spring")
public interface UserHolderMapper {

    @Mapping(source = "user.firstName", target = "firstName")
    @Mapping(source = "user.secondName", target = "secondName")
    @Mapping(source = "user.age", target = "age")
    User userHolderToUser(UserHolder userHolder);
}

注意事项

  • 确保你的User和UserHolder类都有正确的getter/setter方法,MapStruct依赖getter来读取源对象的属性,setter来写入目标对象的属性。
  • 因为你指定了componentModel = "spring",MapStruct会生成Spring Bean的实现类,你可以直接通过构造注入或者@Autowired注入这个映射器来使用。

举个使用的例子:

@Service
public class SomeService {

    private final UserHolderMapper userHolderMapper;

    // 推荐使用构造注入(符合Spring最佳实践)
    public SomeService(UserHolderMapper userHolderMapper) {
        this.userHolderMapper = userHolderMapper;
    }

    public User convertToUser(UserHolder userHolder) {
        return userHolderMapper.userHolderToUser(userHolder);
    }
}

这样就能轻松完成UserHolder到User的转换啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:43:13