我正在尝试使用 mapstruct 在我的 kotlin 项目上转换复杂的 dtos。
映射结构:1.3.1.final 科特林: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
) {
}
A 总是有错误,因为我的构造函数不允许无参数。
您知道如何解决这个问题吗?
您可以使用@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 数据类
Java
一个可能的解决方案是使用 @NoArgsConstructor 注解 dto 类,例如:
@NoArgsConstructor
public class MyClass {
private String myString;
private Int myInt;
}