首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Kotlin - Mapstruct - @AfterMapping只能应用于已实现的类

Kotlin - Mapstruct - @AfterMapping只能应用于已实现的类
EN

Stack Overflow用户
提问于 2022-08-12 09:30:28
回答 2查看 351关注 0票数 0

我目前正在研究Kotlin上的mapstruct映射,它有一些关系,使用Spring引导存储库和服务来获取对象以供进一步处理。但是,我无法实现@AfterMapping

代码语言:javascript
运行
复制
@Mapper(componentModel = "spring")
interface Objectmapper {

  @Mappings(
    Mapping(source = "aCode", target = "a.code"),
    Mapping(source = "bCode", target = "b.code")
  )
  fun convertFormDtoToEntity(
    dto: ObjectFormDto,
    @Context aRepo: ARepository,
    @Context bService: BService
  ): Object

  @AfterMapping
  fun afterMappingFormDtoToEntity(
    dto: ObjectFormDto,
    @Context aRepo: ARepository,
    @Context bService: BService,
    @MappingTarget object: Object
  ){
    object.a = aRepo.findByA(object.a.code)
    object.b = bService.getB(object.b.code)
  }
}

我的目标是在完成对afterMappingFormDtoToEntity()的映射之后实现convertFormToEntity(),但是我无法完成kaptKotlin任务并返回错误

代码语言:javascript
运行
复制
error: @AfterMapping can only be applied to an implemented class
    public abstract void afterMappingFormDtoToEntity(@org.jetbrains.annotations.NotNull()...

我当前的mapstruct版本是"1.5.2.Final",kapt版本为"1.6.10",kapt设置为build.gradle.kts

代码语言:javascript
运行
复制
kapt {
    arguments {
        arg("mapstruct.unmappedTargetPolicy", "IGNORE")
    }
    keepJavacAnnotationProcessors = true
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-12 10:03:05

它是通过改变映射器类型来解决的。

interface Objectmapperabstract class ObjectMapper并将所有方法转换为抽象( @AfterMapping方法除外)

细节是写在我的媒体博客文章:https://medium.com/me/stats/post/5c3f468ee261

票数 0
EN

Stack Overflow用户

发布于 2022-08-12 13:21:07

Kotlin接口中的已实现方法未标记为已实现。因此,MapStruct认为该方法是抽象的,需要实现。

为了工作,您需要用@JvmDefault对方法进行注释

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73332031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档