Почему не срабатывает 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.