如何解决如何使用 Mapstruct 和 Kotlin 在另一个映射器中使用映射器?
我想在 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 实现?
解决方法
差别不大。纯粹的语法差异。
@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;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。