Mapstruct-找不到没有源的属性的映射

问题描述 投票:0回答:1

使用MapStruct最新版本1.3.0最终版..

@Mapping(target = "identifier", qualifiedBy = PensionOfferApplicationFilter.Identifier.class)
@Mapping(target = "optionNumber", source = "insurancePeriod", qualifiedBy = PensionOfferApplicationFilter.OptionNumber.class)
@Mapping(target = "creationDate", qualifiedBy = PensionOfferApplicationFilter.CreationDate.class)
@Mapping(target = "editedPieces", source = "insurancePeriod", qualifiedBy = PensionOfferApplicationFilter.EditedPieces.class)

对于“ identifier”和“ creationDate” ..我在自动生成的Impl文件中找不到任何映射。.这就是我所看到的..如何在没有源的情况下传递某些东西?。

    if (insurancePeriod == null) {
        return null;
    } else {
        PensionApplication pensionApplication = new PensionApplication();
        pensionApplication.setEditedPieces(this.pensionOfferApplicationFilter.editedPieces(insurancePeriod, request, resultDto));
        pensionApplication.setPensionCase(this.insurancePeriodPensionHandlerPartyPensionCase(insurancePeriod));
        pensionApplication.setOptionNumber(this.pensionOfferApplicationFilter.optionNumber(insurancePeriod));
        pensionApplication.setPensionHandlerParty(insurancePeriod.getPensionHandlerParty());
        pensionApplication.setType("elaketarjous");
        return pensionApplication;

标识符应该映射到PensionOfferApplicationFilter类中定义的此方法

@Identifier
public String identifier() {
    return String.valueOf(pensionApplicationRepository.getPensionApplicationIdentifier());
}
spring java-8 mapstruct
1个回答
0
投票
public interface MyMapper{

   @Mapping(target = "identifier", ignore = true ) /* leave it to aftermapping */ 
   @Mapping(target = "optionNumber", source = "insurancePeriod", qualifiedBy = PensionOfferApplicationFilter.OptionNumber.class)
   @Mapping(target = "creationDate", qualifiedBy = PensionOfferApplicationFilter.CreationDate.class)
   @Mapping(target = "editedPieces", source = "insurancePeriod", qualifiedBy = PensionOfferApplicationFilter.EditedPieces.class)
   Target map( Source source, @Context PensionApplicationRepository repo   /* pass the repo as context */);

   @AfterMapping
   default map( Source source, @AfterMapping Target target, @Context PensionApplicationRepository repo ) {
       target.setIdentifier( String.valueOf(repo.getPensionApplicationIdentifier() );
   }

}

附带说明:您真的需要所有预选赛吗?这些仅是处理冲突所必需的:当有多个具有相同源类型的组合时,目标类型

© www.soinside.com 2019 - 2024. All rights reserved.