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

Mapstruct中复用@Mapping映射定义的实现方法咨询

Mapstruct中复用@Mapping映射定义的实现方法咨询

嘿,你这个复用映射配置的需求太贴合实际开发场景了!MapStruct专门提供了@InheritConfiguration注解来解决这种重复编写映射规则的问题,刚好你后来尝试的写法就是正确的方向,我来给你捋清楚细节~

首先看你最初的代码,remoteToNewLocalApp和remoteToLocalAppUpdate两个方法里重复写了相同的@Mapping配置,确实有点冗余:

@Mapper
interface AppMapper {

    @Mapping(target = "appId", source = "atemsPackage.appId", defaultExpression = "java(packageId)")
    @Mapping(target = "appOnRemote", constant = "true")
    fun remoteToNewLocalApp(atemsPackage: AtemsPackage, packageId: String): LocalApp

    @Mapping(target = "appId", source = "atemsPackage.appId", defaultExpression = "java(packageId)")
    @Mapping(target = "appOnRemote", constant = "true")
    fun remoteToLocalAppUpdate(atemsPackage: AtemsPackage, packageId: String): LocalAppRemoteUpdate

    companion object {
        val INSTANCE: AppMapper = Mappers.getMapper(AppMapper::class.java)
    }
}

而你更新后的写法就完美解决了这个问题:通过@InheritConfiguration(name = "remoteToNewLocalApp")指定要继承的方法,MapStruct会自动把remoteToNewLocalApp上的所有映射规则复用给remoteToLocalAppUpdate,不用再重复写一遍了:

@Mapper
interface AppMapper {

    @Mapping(target = "appId", source = "atemsPackage.appId", defaultExpression = "java(packageId)")
    @Mapping(target = "appOnRemote", constant = "true")
    fun remoteToNewLocalApp(atemsPackage: AtemsPackage, packageId: String): LocalApp

    @InheritConfiguration(name = "remoteToNewLocalApp")
    fun remoteToLocalAppUpdate(atemsPackage: AtemsPackage, packageId: String): LocalAppRemoteUpdate

    companion object {
        val INSTANCE: AppMapper = Mappers.getMapper(AppMapper::class.java)
    }
}

这里还有几个实用的细节要提醒你:

  • 要确保被继承的方法和新方法的参数列表完全匹配,就像你这里两个方法都是(AtemsPackage, String),这样继承才会生效;如果参数有差异,可能需要配合@Named或者调整参数顺序
  • 如果新方法需要个别调整映射规则,完全可以在@InheritConfiguration下面再额外加@Mapping,新的@Mapping会覆盖继承来的对应配置
  • 如果你的项目里有更多方法需要复用相同的映射规则,还可以用@MapperConfig定义一个全局的配置接口,然后在@Mapper的config属性里指定,这样整个Mapper都能复用这套规则,适合更复杂的场景

这样一来,不仅代码更简洁,后续如果要修改映射规则,只需要改被继承的那个方法即可,维护起来也方便多啦!

备注:内容来源于stack exchange,提问作者rkr87

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 06:29:38