当前位置: 首页 > 知识库问答 >
问题:

为什么Mapstruct不能生成字段映射

柴辰阳
2023-03-14

我使用mapstruct在两个Calses之间进行映射:CandidateDTO和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字段都为空,因为没有生成映射字段。

请帮忙。

共有1个答案

於德馨
2023-03-14

MapStruct还不支持这一点。请查看问题跟踪器中的问题mapstruct/mapstruct#674。

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

@Mapper
public interface CandidateMapper {

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

    CandidateDTO toCandidateDTO(CandidateEntity candidateEntity);
}
 类似资料:
  • “”“@Data@Builder(toBuilder=true)@allargsconstuctor@noargsconstuctor public class ServiceAddress{private String addLine1;private String addLine2;private String city;private String state;private String

  • 假设我有这些实体: null

  • 我试图解析下面的processingdate,以便最终得到格式为2020-11-10T10:43:07 00:00的日期。我如何修改以下内容以产生此结果?

  • 实体或字段可以映射到/字段,例如,可以映射到: 然而,生成的实现类不包括类的任何导入语句,尽管它存在于抽象类中,因此代码不编译: 为什么会这样?我做错了吗?怎么解决这个? Edit2:在MapStruct的Github上发布了这个问题:https://Github.com/mapstruct/mapstruct/issues/844

  • 我想映射2个模型,其中每个模型都有几乎相同的枚举。让我展示: 第一个模型有枚举: 第二个模型具有枚举: 我有这样的自定义映射方法: 然后我用: 但是你可以得到: 我还创建了枚举映射器,如: 但我不需要单独设置,只希望枚举字段映射到内部映射中。简单地说,当我做枚举时,也应该映射。 谢谢 p、 对不起我的英语,希望我的问题有意义:)

  • 默认情况下,MapStruct映射源和目标的所有属性,如果它们具有相同的名称。中的元素可用于省略任何字段映射。但那不是我想要的。我想控制映射策略。我想指定如下内容: 现在,这个映射仅仅意味着将id和名称从源映射到目的地。除非在mappings注释中指定,否则不应映射其他字段。