Mapstruct entre objetos com exatamente os mesmos campos

Sep 09 2020

Tenho usado mapstruct para mapear objetos de classes que variam ligeiramente.

Agora, eu tenho um caso de uso em que as duas classes são exatamente iguais. Uma das classes é um BO (Qualification) e a outra é um DTO (QualificationRecord) com exatamente os mesmos campos.

Como posso usar um @Mapperpara converter entre esses dois tipos?

Até agora estou fazendo

@Mapping(source = "qualificationId", target = "qualificationId")
QualificationRecord getQualificationRecordFromQualification(final Qualification qualification);

E é capaz de gerar o mapeador, configurando todos os campos. Mas, source = "qualificationId", target = "qualificationId"parece redundante e eu tive que adicioná-lo apenas porque não havia nenhuma @Mapping()anotação sem parâmetro disponível.

Existe uma maneira de dizer ao mapeador para copiar todos os campos, sem escrever uma linha redundante?

Respostas

3 michaeak Sep 09 2020 at 21:02

Basta definir os métodos de mapeamento em uma interface como esta irá copiar todos os campos de um objeto para o outro:

/**
     * Mapper. Automatically implemented by mapstruct.
 * 
 */
@Mapper
public interface SomeObjMapper {

    /**
     * instance.
     */
    final SomeObjMapper INSTANCE = Mappers.getMapper(SomeObjMapper.class);

    /**
     * Mapper method to map entity to domain. Automatically implemented by mapstruct.
     * 
     * @param entity
     *        given entity.

     * @return Returns the domain object.
     */
    SomeObj entityToDomain(SomeObjEntity entity);

    /**
     * Mapper method to map domain object to entity. Automatically implemented by mapstruct.
     * 
     * @param domain
     *        given domain object.
     * @return Returns the entity.
     */
    SomeObjEntity domainToEntity(SomeObj domain);

}