2017-10-20 26 views
0

MapStructを使用して以下のシナリオでBeanマッピングを実行するにはどうすればよいですか。MapStructを使用したネストされたリストのマッピング

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; 
} 

は、今私はmemberNameの(リストのリスト)にサブジェクト名、studentNameにするtargetId、courseNameにソースIDをマップします。

答えて

1

まず第一に、それの代わりにListCourse要素にしない理由Sourceは、常に1つのコースが含まれているのですか?

これを行うと、マッピングがはるかに簡単になります。現在の設定では、もう少し複雑です。

@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); 
} 
+0

詳細な回答ありがとうございます。なぜコースはリストですか?それが要件です。また、マッパークラスの正しいソースコードで回答を更新することもできます。最初のtoMembers()メソッドのStudentリストの代わりにMember Listを返しました。 –

+0

私は私が従うとは思わない。ソースコードが 'List ' – Filip

+0

を返します。上記のコードでコンパイル時エラーが発生します。 –

関連する問題