首页 > 解决方案 > 为什么 Mapstruct 不能生成字段映射

问题描述

我正在使用 mapstruct 来做两个 calsses 之间的映射: Candidate 和 CandidateDTO 。

我的映射器界面是这样的:

@Mapper
public interface CandidateMapper {
    CandidateDTO toCandidateDTO(Optional<CandidateEntity> candidateEntity);
}

生成的源是这样的:

public class CandidateMapperImpl implements CandidateMapper {
    @Override
    public CandidateDTO toCandidateDTO(Optional<CandidateEntity> candidateEntity) {
        if ( candidateEntity == null ) {
            return null;
        }
        CandidateDTO candidateDTO = new CandidateDTO();
        return candidateDTO;
    }
}

我的问题是,在映射时,我将所有 DTO 字段都设为空,因为未生成映射字段。

请提供任何帮助。

标签: spring-bootmappingmapstruct

解决方案


MapStruct 尚不支持开箱即用。在我们的问题跟踪器中查看问题mapstruct/mapstruct#674

您可以做的是使用默认的自定义方法。

@Mapper
public interface CandidateMapper {

    default CandidateDTO toCandidateDTO(Optional<CandidateEntity> candidateEntity) {
        return toCandidateDTO(candidateEntity.orElse(null);
    }

    CandidateDTO toCandidateDTO(CandidateEntity candidateEntity);
}

推荐阅读