如何在另一个使用mapstruct和kotlin的mapper中使用mapper?

jv4diomz  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(410)

我想用kotlin中的mapstruct将实体Map到具有嵌套dto的dto。
我的第一个dto定义如下:

data class FirstDto (
    val something: String
)

使用mapstruct将此dtoMap到实体中,反之亦然。这是Map器:

@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定义了一个Map器。但是,我希望这个Map器使用firstmapperMap嵌套的dto。所以我应该用 uses Map程序的属性。
在java中,如下所示: @Mapper(componentModel = "spring", uses = FirstMapper.class) .
应该如何使用kotlin实现它?

2w3rbyxf

2w3rbyxf1#

差别不大。纯粹的语法差异。

@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;
    }
}

相关问题