我有一个Student对象扩展Person对象.
public abstract class Person implements IIdentifiable {
private String contactNumber;
// other properties
public String getContactNumber() {
return contactNumber;
}
public void setContactNumber(String contactNumber) {
this.contactNumber = contactNumber;
}
}
public class Student extends Person {
private String studentNumber;
//Other properties
public String getStudentNumber() {
return studentNumber;
}
public void setStudentNumber(String studentNumber) {
this.studentNumber = studentNumber;
}
}
Run Code Online (Sandbox Code Playgroud)
学生有财产studentNumber,人有财产contactNumber.当我将Student对象映射到StudentDto它时,会对给定的属性感到困惑.
public class StudentDto{
private String studentNumber;
public String getStudentNumber() {
return studentNumber;
}
public void setStudentNumber(String studentNumber) {
this.studentNumber = studentNumber;
}
}
Run Code Online (Sandbox Code Playgroud)
这仅在某些事件中发生.我想知道是什么原因
1) The destination property com.cinglevue.veip.web.dto.timetable.StudentDto.setStudentNumber() matches multiple source property hierarchies:
com.cinglevue.veip.domain.core.student.StudentProfile.getStudent()/com.cinglevue.veip.domain.core.Person.getContactNumber()
com.cinglevue.veip.domain.core.student.StudentProfile.getStudent()/com.cinglevue.veip.domain.core.Student.getStudentNumber()
Run Code Online (Sandbox Code Playgroud)
1.
您可以MatchingStrategies使用以下命令更改 ,
modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
Run Code Online (Sandbox Code Playgroud)
PS:modelmapperMatchingStrategies.STANDARD隐式使用
但它要求源端和目标端的属性名称标记彼此精确匹配。
2. 告诉 ModelMapper 在发现多个源属性层次结构时忽略映射:
modelMapper.getConfiguration().setAmbiguityIgnored(true);
Run Code Online (Sandbox Code Playgroud)
小智 4
自从你问起以来已经很久了。由于这里没有答案,我向您展示我的适合我的解决方案。
该问题是由于目标属性名称让 ModelMapper 感到困惑而引起的。因此,要解决这个问题,我们需要执行两个步骤。1. 假设 ModelMapper 忽略一些可能令人困惑的东西。2. 指定混淆属性的指示映射。
详细代码在这里:
ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration().setAmbiguityIgnored(true);
modelMapper.createTypeMap(Student.class, StudentDto.class)
.addMapping(Student::getStudentNumber, StudentDto::setStudentNumber);
Run Code Online (Sandbox Code Playgroud)