我正在尝试使用映射结构使用两个对象中的字段来创建列表。它成功地使用所有字段创建了新列表,但我丢失了对象中的所有值。我使用的是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
}]
在您的情况下,由于目标对象中的变量名称无法与源对象嵌套对象中的变量直接匹配,因此您也必须定义这些映射,如下所示:
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 并尝试按原样包含代码,因为编译这个代码需要一段时间,所以我不知道你是否有其他问题。