Как отобразить только указанные поля, используя mapStruct?

MapStruct отображает все свойства источника и назначения по умолчанию, если они имеют одинаковые имена. Хотя мы можем использовать свойство ignore в @Mapping для пропуска любого отображения поля. Но это не я хочу. Я хочу контролировать стратегию картирования. Я должен указать что-то вроде

@Mapper(STRATEGY=MAPPING_STRATEGY.SPECIFIED)
public interface EmployeeToEmployeeDTOMapper {
        @Mappings({
                   @Mapping(target="id", source="id"),
                   @Mapping(target="name", source="name")
                 })
        public EmployeeDTO employeeToEmployeeDTO (Employee emp);
}

Теперь это отображение предназначено только для отображения идентификатора и имени из источника в место назначения. Никакие другие поля не должны отображаться, если это не указано в аннотации отображений.

2 ответа

Решение

То, что вы ищете, является запросом функции в # 1392. Существует ожидающий PR, поэтому он будет доступен для использования в следующей версии (1.3.0). Окончательный API еще не определен. Следите за выпуском и пиаром, который будет уведомлен, когда это будет сделано

Начиная с MapStruct 1.3, @BeanMapping(ignoreByDefault = true) аннотации могут быть добавлены к методу сопоставления для достижения этого результата:

      public interface EmployeeToEmployeeDTOMapper {
    @BeanMapping(ignoreByDefault = true)
    @Mapping(target="id", source="id")
    @Mapping(target="name", source="name")
    EmployeeDTO employeeToEmployeeDTO(Employee emp);
}

За в Javadocs из ignoreByDefault элемент аннотации:

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

Другие вопросы по тегам