使用MapStruct的嵌套列表映射

你知道一个

在以下情况下,如何使用MapStruct进行bean映射。

class Source {
private String sourceId;
private List<Course> courses;  //always returns only one course
}

class Course {
private String courseName;
private List<Student> students; 
}

class Student {
private String studentName;
}

class Target {
private String targetId;
private String subjectName;
private List<Member> members;
}

class Member {
private String memberName;
}

现在,我想将sourceId映射到targetId,将courseName映射到subjectName,将StudentName映射到memberName(从列表到列表)。

菲利普

首先,Source总是包含一个过程,为什么不将其Course设为元素而不是List

如果这样做,映射将更加简单。在您当前的设置下,它要复杂一些。

@Mapper
public interface MyMapper {

    @Mapping(target = "targetId", source = "sourceId")
    @Mapping(target = "subjectName", source = "courses")
    @Mapping(target = "members", source = "courses")
    Target map(Source source);

    default String subjectName(List<Course> courses) {
        if (courses == null || courses.isEmpty()) {
            return null;
        }
        return courses.get(0).getCourseName();
    }

    default List<Member> toMembersFromCourses(List<Course> courses) {
        if (courses == null || courses.isEmpty()) {
            return null;
        }
        return toMembers(courses.get(0).getStudents());
    }

    List<Member> toMembers(List<Student> students);

    @Mapping(target = "memberName", source = "studentName")
    Member toMember(Student student);
}

如果Course不是列表。那么您可以使用1.2.0.Final做得更优雅。

@Mapper
public interface MyMapper {

    @Mapping(target = "targetId", source = "sourceId")
    @Mapping(target = "subjectName", source = "course.courseName")
    @Mapping(target = "members", source = "course.students")
    Target map(Source source);

    @Mapping(target = "memberName", source = "studentName")
    Member toMember(Student student);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章