28 апреля 2019
Spring позволяет проверять формат данных в бинах в декларативном стиле при помощи специальных аннотаций из пакета javax.validation.
Предположим, у нас есть rest-контроллер, в который мы хотим добавить метод, создающий пользователя. Очевидно, что это будет POST-запрос:
На вход метод принимает бин CreateUserRequest, который мы будем передавать в формате json. Этот параметр метода снабжён аннотациями @RequestBody (говорит, что параметр будет именно в теле запроса) и @Valid (аннотация, которая активирует механизм валидации для данного бина). Обратите внимание, что если не указать аннотацию @Valid, то валидация работать не будет.
В случае успеха в ответ на наш запрос мы увидим строку «Success».
Сам бин, представляющий тело запроса, выглядит так:
Здесь представлены основные аннотации, используемые для валидации входных данных.
Аннотация @NotNull указывает на обязательность параметра. Если мы такую аннотацию вешаем на числовые типы, то следует использовать именно ссылочные типы, а не примитивные, иначе смысл аннотации теряется. Например, тип int всегда имеет значение по умолчанию, а потому проверка не сработает даже если в теле запроса этот параметр не будет указан. Чтобы отловить эту ситуацию, используйте ссылочный Integer.
Аннотация @Past применительно к датам проверяет, что указана уже прошедшая дата. Очевидно, что дата рождения пользователя всегда меньше текущей даты.
Аннотация @Positive указывает, что число должно быть положительным. В нашем случае это поле friendsCount, ведь количественные характеристики не могут быть отрицательными. При этом обратите внимание, что у данного поля нет аннотации @NotNull, т.е. оно является необязательным.
Аннотация @Size применительно к спискам позволяет задать минимальное и максимальное количество элементов. Очевидно, что у любого человека есть как минимум один документ – паспорт.
Json, который будет передан в теле запроса, удовлетворяющий всем этим проверкам, может выглядеть так:
Если же мы нарушим хотя бы одно условие, то в ответ получим json с детальным описанием ошибки. Статус ответа будет не 200, а 400 (Bad Request).
Мы рассмотрели основные аннотации, используемые для проверки входных данных. Но все названия этих аннотаций довольно точно описывают их назначение.
Kotlin, Java, Spring, Spring Boot, Spring Data, SQL, PostgreSQL, Oracle, Linux, Hibernate, Collections, Stream API, многопоточность, файлы, Nginx, Apache, maven, gradle, JUnit, YouTube, новости, руководство, ООП, алгоритмы, головоломки, rest, GraphQL, Excel, XML, json, yaml.