Как стать автором
Обновить

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

Что будет, если критерии валидации одного поля зависят от другого?

Можете привести пример?

В спринговом валидаторе можно проверять переменные метода, при этом учитывая зависимость между аргументами. Например, когда вам передают 2 даты (от и до), и надо проверить, что дата "от" меньше, чем дата "до". Думаю речь об этом

Дропдаун тип документа {паспорт РФ, загранпаспорт, права, свидетельство о рождении}

Следующее поле - номер документа - text с вводом и валидацией по маске в зависимости от значения первого.

Прошу прощения, но я не особо понял пример.

То есть я ввел серию, после чего номер, и номер валидируется исходя из валидации серии?

Нет. Сначала выбираете тип документа, и в зависимости от этого выбора поле номера документа валидируется по-разному.

Подобную проблему можно решить следующим образом,- используя стандартный валидатор.
У любой аннотации javax.validation есть параметр message, туда можно внести готовое сообщение, но это нам не подходит, так как, как правило, требуется локализация и поэтому в message кидаем ключ сообщения из message bundle. Туда же, в параметр message можно положить код ошибки, например
@RegExp(value = "^[а-яА-ЯёЁ .'-]+$", message = "wrong.validation.email.{777}")
Теперь в ControllerAdvice из стандартного исключения достаем шаблон что мы указали в dto, используя этот шаблон достаем локализованное сообщение из бандла, так как шаблон содержит код, то путем не хитрого парсинга достаем его (777) и засовываем в ответ.

Кроме кода ошибки нужно ещё передать параметры ошибки, чтобы вставить в локалзованную строку.

1) При увелечении нагрузки аспекты встанут боттлнеком

2) Есть множество api для валидации, которое можно использовать вместо

Зарегистрируйтесь на Хабре, чтобы оставить комментарий