问题描述
我正在尝试使用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数据类