Kotlin,mapstruct和生成的DTO错误“没有可访问的无参数构造函数”

问题描述

我正在尝试使用mapstruct在kotlin项目上转换复杂的dto。

mapstruct:1.3.1。最终 科特林:1.3.71 openapi生成器:4.2.3

例如,我想从一个简单的对象转换为TestObjectDTO

    @Mapping(source = "mydescription",target = "description")
    fun convertToDto(dto: TestObject): TestObjectDTO

我使用OpenApi生成我的DTO: yaml

components:
  schemas:
    TestObject:
      title: TestObject
      description: ''
      type: object
      properties:
        mode:
          type: string
        description:
          type: string
      required:
        - mode
        - description

生成的DTO

/**
 * 
 * @param mode 
 * @param description 
 */
data class TestObjectDTO (

        @get:NotNull 
        @JsonProperty("mode") var mode: kotlin.String,@get:NotNull 
        @JsonProperty("description") var description: kotlin.String
) {

}

一个总是有错误,因为我的构造函数不允许无参数。

您是否知道如何解决此问题?

解决方法

您可以使用@ObjectFactory手动实例化DTO类。问题是TestObjectDTO不接受空值,因此您将需要使用虚假值,

@Mapper
interface TestObjectMapper {

    @ObjectFactory
    fun createDto() = TestObjectDto("","")

    @Mapping(source = "mydescription",target = "description")
    fun convertToDto(dto: TestObject): TestObjectDto
}
,

1.3.1.Final不支持使用构造函数创建对象。如错误消息所述,您将必须定义一个不带参数的构造函数。

但是,您可以尝试1.4.0.Beta3,该版本增加了对使用构造函数的映射的支持。这适用于Kotlin数据类

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...