ModelMapper会混淆不同的属性

Sus*_*ath 5 java modelmapper

我有一个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)

fel*_*gnu 5

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)