我想在 Kotlin 中使用 Mapstruct 将实体映射到带有嵌套 DTO 的 DTO。
我的第一个 DTO 定义如下:
data class FirstDto (
val something: String
)
此 DTO 使用 Mapstruct 映射到实体中,反之亦然。这是映射器:
@Mapper(componentModel = "spring")
interface FirstMapper {
fun entityToDto(entity: FirstEntity): FirstDto
fun dtoToEntity(dto: FirstDto): FirstEntity
}
第二个 DTO 嵌套第一个 DTO:
data class SecondDto (
val somethingElse: String,
val firstDto: FirstDto
)
对于第一个 DTO,我使用 Mapstruct 定义了一个 Mapper。但是,我希望这个映射器使用 FirstMapper 来映射嵌套的 DTO。所以我应该使用 Mapper 的 uses
属性。
在 Java 中,这看起来像这样:@Mapper(componentModel = "spring", uses = FirstMapper.class)
。
应该如何使用 Kotlin 实现?
答案 0 :(得分:2)
差别不大。纯粹的语法差异。
@Mapper(componentModel = "spring", uses = [FirstMapper::class])
interface SecondMapper {
@Mapping(source = "firstEntity", target = "firstDto")
fun entityToDto(entity: SecondEntity): SecondDto
@Mapping(source = "firstDto", target = "firstEntity")
fun dtoToEntity(dto: SecondDto): SecondEntity
}
哪个生成
public class SecondMapperImpl implements SecondMapper {
private final FirstMapper firstMapper = Mappers.getMapper(FirstMapper.class);
@Override
public SecondDto entityToDto(SecondEntity entity) {
...
firstDto = firstMapper.entityToDto(entity.getFirstEntity());
somethingElse = entity.getSomethingElse();
SecondDto secondDto = new SecondDto(somethingElse, firstDto);
return secondDto;
}
@Override
public SecondEntity dtoToEntity(SecondDto dto) {
...
firstEntity = firstMapper.dtoToEntity(dto.getFirstDto());
somethingElse = dto.getSomethingElse();
SecondEntity secondEntity = new SecondEntity(somethingElse, firstEntity);
return secondEntity;
}
}