ModelMapper会混淆不同的属性

时间:2016-03-25 07:19:20

标签: 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;
    }
}

学生拥有财产studentNumber,且人拥有财产contactNumber。当我将Student对象映射到StudentDto时,它会对给定的属性感到困惑。

public class StudentDto{
    private String studentNumber;
    public String getStudentNumber() {
        return studentNumber;
    }

    public void setStudentNumber(String studentNumber) {
        this.studentNumber = studentNumber;
    }
}

仅在某些情况下发生这种情况。我想知道是什么原因

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()

2 个答案:

答案 0 :(得分:2)

1。 您可以使用以下命令更改MatchingStrategies

modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);

PS:modelmapper隐式使用MatchingStrategies.STANDARD

但是它要求源端和目标端的属性名称标记必须精确匹配。

2。 在找到多个源属性层次结构时,告诉ModelMapper忽略映射:

modelMapper.getConfiguration().setAmbiguityIgnored(true);

答案 1 :(得分:1)

问到已经很久了。因为这里没有答案,所以我向您展示我的解决方案。

该问题是由目标属性名称引起的,让ModelMapper感到困惑。 因此,要解决该问题,我们需要执行两个步骤。 1.说ModelMapper忽略了可能引起混淆的内容。 2.指定指示映射以混淆属性。

详细代码在这里:

ModelMapper modelMapper = new ModelMapper();

modelMapper.getConfiguration().setAmbiguityIgnored(true);

modelMapper.createTypeMap(Student.class, StudentDto.class)
    .addMapping(Student::getStudentNumber, StudentDto::setStudentNumber);