Почему не срабатывает Hibernate валидация?

Как известно, в контроллере при передаче в запросе имени аргумента, который должен быть 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.


Ответы (0 шт):