MapStruct Есть ли способ определить стратегию перечисления по умолчанию для неизвестного значения на уровне класса?

#java #mapstruct

#java #mapstruct

Вопрос:

Я хочу определить на уровне класса mapper стратегию, в которой говорилось, что если значение перечисления не сопоставлено, сопоставить его с null.

Точно так же, как я бы написал на уровне метода:

     @ValueMapping( source = MappingConstants.ANY_REMAINING, target = MappingConstants.NULL )
  

Чтобы она применялась ко всем вспомогательным методам сопоставления, автоматически генерируемым mapstruct, не заставляя меня объявлять их все, просто чтобы добавить эту строку.

Ответ №1:

Создайте сопоставитель ‘class’ для вашего перечисления, а затем используйте его в другом сопоставителе с uses атрибутом @Mapper аннотации.

Например :

 public interface MyEnumMapper {

    @ValueMapping( source = MappingConstants.ANY_REMAINING, target = MappingConstants.NULL )
    public String asString(MyEnum myenum);
}
  

а затем использовать его

 @Mapper(uses=MyEnumMapper.class)
public class CarMapper {

    CarDto carToCarDto(Car car);
}
  

(предполагая, что Car объект имеет атрибут типа MyEnum )

смотрите полную документацию здесь:https://mapstruct.org/documentation/stable/reference/html/#invoking-other-mappers

Комментарии:

1. Спасибо, но я ищу способ не объявлять метод для каждого перечисления, просто чтобы сказать, чтобы сопоставить значение null, если не найдено. Ваш ответ просто заставляет меня перенести объявление в подкласс.