Как известно, в контроллере при передаче в запросе имени аргумента, который должен быть Enum'ом, существует функционал по автоматическому преобразованию данного аргумента в одно из значений Enum'a.
Вот я зарегистрировал в контроллере
FormatterRegistry
:
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new StringToColumnNameConverter());
}
Вот как выглядит
StringToColumnNameConverter
внутри с Hibernate валидацией (@NotBlank):
public class StringToColumnNameConverter implements Converter<String, ColumnName> {
@Override
public ColumnName convert(@NotBlank(message = PropertyKey.VALIDATION_DATABASE_COLUMN_NAME_NOT_BLANK) String source) {
return ColumnName.valueOf(source.toUpperCase());
}
}
Идем дальше. В контроллере вызывается метод, который принимает имя столбца (
columnName
):
@GetMapping(params = ParameterName.SORT_BY)
public Set<GiftCertificateDto> findAllSorted(@RequestParam(value = ParameterName.SORT_BY)
@NotEmpty(message = PropertyKey.VALIDATION_GIFT_CERTIFICATE_COLUMN_MANE_NOT_EMPTY)
Set<ColumnName> columnNames) {
return service.findAllSorted(columnNames);
}
Первая Hibernate аннотация
@NotEmpty(message = PropertyKey.VALIDATION_GIFT_CERTIFICATE_COLUMN_MANE_NOT_EMPTY)
отрабатывает на ура. Но если я передам строку, содержащую одни пробелы вида , то вторая аннотация
@NotBlank
внтури
StringToColumnNameConverter
почему-то не отрабатывает своё дело. Почему?
Что я пробовал:
- аннотировать
@Validated
класс
StringToColumnNameConverter
;
- аннотировать
@Validated
метод
convert(...)
класса
StringToColumnNameConverter
;
- в
StringToColumnNameConverter
добавлял аннотацию
@Valid
:
public class StringToColumnNameConverter implements Converter<@Valid String, ColumnName>
- в контроллере внутри Set вставлять аннотацию
@Valid
:
@GetMapping(params = ParameterName.SORT_BY)
public Set<GiftCertificateDto> findAllSorted(@RequestParam(value = ParameterName.SORT_BY)
@NotEmpty(message = PropertyKey.VALIDATION_GIFT_CERTIFICATE_COLUMN_MANE_NOT_EMPTY)
Set<@Valid ColumnName> columnNames) {
return service.findAllSorted(columnNames);
}
Контроллер аннотирован @Validated.
Для справки: @NotBlank
- The annotated element must not be null and must contain at least one non-whitespace character. Accepts CharSequence.