Mapstruct: поле карты условно или игнорировать - PullRequest
0 голосов
/ 07 января 2020

У меня есть что-то вроде этого:

class StudentDTO {
    String name;
    Integer rollNo;
    List<CourseDTO> coursesTaken;
    Boolean isFailed;
    List<CourseDTO> failedCourses;
}

Я хочу отобразить failedCourses Список из StudentDTO в Student только в том случае, если флаг isFailed имеет значение true, иначе игнорировать поле, но без использования реализация по умолчанию в интерфейсе. Есть ли в mapstruct аннотация / параматер, который может мне помочь? Я пытался использовать expression, но не могу заставить его работать.

1 Ответ

0 голосов
/ 11 января 2020

Есть несколько подходов. Но все они сводятся к написанию собственного кода для этого:

@Mapper
public interface MyMapper{

   @Mapping( target = "failedCourses", ignore = true )
   Student map(StudentDTO dto);


   List<Course> map(List<CourseDTO> courses);

   @AfterMapping
   default void map(StudentDTO dto, @MappingTarget Student target) {
       if (dto.isFailed() ) {
           target.setFailedCourses( map( dto.getFailedCourses() );
       }
   }
}

Вы также можете создать выделенное отображение для одного свойства и использовать весь источник в качестве входных данных. Например,

@Mapper
public interface MyMapper{

   @Mapping( target = "failedCourses", source = "dto" )
   Student map(StudentDTO dto);

   List<Course> map(List<CourseDTO> courses);

   default List<Course> map(StudentDTO dto) {
       if (dto.isFailed() ) {
           return map( dto.courses );
       }
   }
}
...