Java: Веб-технологии
Теория: Валидация
В коде ниже данные от пользователей принимаются и сохраняются как есть. То есть мы полагаем, что пользователи вводят данные корректно:
На практике такого не бывает. Данные могут быть неполными, ошибочными или неподходящими для нашей системы. В этом уроке мы научимся работать с такими данными.
Что такое валидация
Получив данные от пользователя, мы должны их проверить. Такая проверка называется валидацией. Валидация включает два основных элемента:
- Проверка входных данных на корректность — например, заполнены ли обязательные поля или совпадает ли пароль и его подтверждения
- Проверка возможности выполнить операцию — например, мы не сможем зарегистрировать нового пользователя, если он пытается ввести почту, связанную с уже существующим аккаунтом
Как проверить корректность данных
Проверить корректность введенного пароля можно простым сравнением:
Что делать дальше? Будет логично, если мы отобразим ту же форму с двумя важными дополнениями:
- Нужно сохранить введенные данные, чтобы пользователю не пришлось заполнять все поля заново
- Нужно вывести сообщения об ошибках — например, списком над формой
Посмотрим сразу на готовый код для решения этой задачи, а потом разберем его.
Шаг 1. Создаем дата-класс, который передает в шаблон данные формы и ошибки. Ошибки передаются в виде объекта, который формирует Javalin в случае ошибки валидации:
Шаг 2. Расширяем обработчик. Добавляем встроенный механизм валидации Javalin и обработку его исключений:
Валидация в Javalin работает через методы *AsClass. Они возвращают валидатор, который содержит набор методов для дополнительных проверок. Здесь мы использовали метод check(), который принимает на вход два параметра:
- Функцию-предикат, в которой выполняется проверка
- Строку, которую мы выведем при проваленной проверке
Если валидация провалена, Javalin выкидывает исключение ValidationException. Далее мы перехватываем его, чтобы отрисовать форму. Затем мы идем в блок catch, берем данные формы и это исключение, после чего передаем все в шаблон users/build.jte на отрисовку.
Шаг 3. Заполняем шаблон данными и выводим ошибки:
Чтобы заполнить данные, достаточно применить интерполяцию в нужных элементах формы. А вот вывод ошибок выглядит чуть сложнее. Все дело в структуре объектов для представления ошибок.
Каждая ошибка представляет собой Map, потому что один валидатор может генерировать несколько ошибок. Например, мы можем добавить проверку на длину пароля:
Шаг 4. Дополняем обработчик формы создания пользователя, потому что теперь его шаблон работает с BuildUserPage:
Рекомендуемые программы
Завершено
0 / 23



