为什么mapstruct在新的arraylist中将所有值设置为null

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

我正在尝试使用映射结构使用两个对象中的字段来创建列表。它成功地使用所有字段创建了新列表,但我丢失了对象中的所有值。我使用的是map struct 1.5.5 Final,而不是使用lombok作为getter和setter。请帮我找出我缺少的东西。

public static void main(String[] args) {
 FhExtra fhExtra = new FhExtra();
 fhExtra.setLoanNumber("123456");
 fhExtra.setFILoanNumber("896");
 FhExtraImportResults extraImportResults1 = new FhExtraImportResults();
 extraImportResults1.setLoanId(56L);
 extraImportResults1.setRecord(fhExtra);
 List<FhExtraImportResults> extraImportResults = new ArrayList<>();
 extraImportResults.add(extraImportResults1);

 FhListItemMapper mapper = Mappers.getMapper(FhListItemMapper.class);
 List<FhlbExtraCsv> newList = extraImportResults.stream().map(mapper::map).toList();
 // newList  is having all the fields but dont have the values i set.
 }



 @Mapper
 public interface FhListItemMapper {
 @Mapping(target = "loanId", source = "results.loanId")
 @Mapping(target = "error", source = "results.error")
 FhlbExtraCsv map(FhlbExtraImportResults results);
 }


 public class FhExtra {
 String LoanNumber;
 String FILoanNumber;
 }

 public class FhlbExtraImportResults {
 FhExtra record;
 String error;
 Long loanId;
 }

 public class FhlbExtraCsv {
 String LoanNumber;
 String FILoanNumber;
 String error;
 Long loanId;
 }

预期输出就像

[{
 LoanNumber : 123456
 FILoanNumber : 896
 error : null
 loanId : 56
}]
java arraylist mapstruct
1个回答
0
投票

在您的情况下,由于目标对象中的变量名称无法与源对象嵌套对象中的变量直接匹配,因此您也必须定义这些映射,如下所示:

public interface FhListItemMapper {
    @Mapping(target = "FILoanNumber", source= "results.record.FILoanNumber")
    @Mapping(target = "LoanNumber", source = "results.record.LoanNumber")
    @Mapping(target = "loanId", source = "results.loanId")
    @Mapping(target = "error", source = "results.error")
    Main.FhlbExtraCsv map(Main.FhExtraImportResults results);
}

另外,我不知道你需要这个代码做什么,但是请查看 JLS 并尝试按原样包含代码,因为编译这个代码需要一段时间,所以我不知道你是否有其他问题。

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