Gae*_*tan 2 java spring kotlin mapstruct
我想在Kotlin中使用Mapstruct将实体映射到具有嵌套 DTO 的 DTO。
我的第一个 DTO 定义如下:
data class FirstDto (
val something: String
)
Run Code Online (Sandbox Code Playgroud)
该 DTO 使用 Mapstruct 映射到实体中,反之亦然。这是映射器:
@Mapper(componentModel = "spring")
interface FirstMapper {
fun entityToDto(entity: FirstEntity): FirstDto
fun dtoToEntity(dto: FirstDto): FirstEntity
}
Run Code Online (Sandbox Code Playgroud)
第二个 DTO 嵌套第一个 DTO:
data class SecondDto (
val somethingElse: String,
val firstDto: FirstDto
)
Run Code Online (Sandbox Code Playgroud)
对于第一个DTO,我使用Mapstruct定义了一个Mapper。但是,我希望这个映射器使用FirstMapper来映射嵌套的 DTO。所以我应该使用Mapperuses的属性。
在 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
}
Run Code Online (Sandbox Code Playgroud)
这会产生
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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11638 次 |
| 最近记录: |