Обзор

Проверка ввода является обязательной в любом приложении масштабирования, и очень часто это работа, которая выполняется на нескольких уровнях приложения от веб до уровня постоянства, применяя в основном один и тот же набор правил. , превращаясь в трудоемкую и многословную работу. Спецификация проверки Java-компонента дает нам возможность применять проверку на любом уровне с использованием метаданных компонента для применения правил проверки на любом уровне без дублирования кода.

В этом руководстве я покажу вам, как использовать проверку Java Bean в приложении Spring Boot и как расширять его функциональные возможности для создания настраиваемого валидатора ограничений и возврата с настраиваемым ответом на ошибку, когда проверка тела запроса не выполняется. встретиться.

Предпосылки

  • Hibernate Validator - это официальная реализация Java Bean Validation, которая дает нам возможность интегрировать и расширять функциональность проверки.
<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-validator</artifactId>
   <version>6.1.6.Final</version>
</dependency>
  • Язык выражений необходим для использования интерполяции в сообщениях проверки.
<dependency>
   <groupId>javax.el</groupId>
   <artifactId>el-api</artifactId>
   <version>2.2</version>
</dependency>
  • Весенняя паутина
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Создание пользовательских ограничений

Проверка Java-бина и некоторые разработчики поставляют со списком встроенных ограничений, которые вы можете использовать для проверки бина на любом уровне приложения, однако бывают случаи, когда эти ограничения не удовлетворяют наши потребности в валидации. Спецификация Bean Validation дает нам возможность создавать собственные ограничения, отвечающие нашим требованиям.

Давайте создадим специальную аннотацию Constratin, которая предотвращает использование определенных имен

  1. Валидатор, использующий это ограничение, выполнит фактическую проверку и при необходимости выполнит некоторую дополнительную работу по генерации сообщения.

2. Это обязательное поле, используемое для ограничения группировки. В этом руководстве это не требуется.

3. Это обязательное поле, используемое для создания полезной нагрузки и установки уровня серьезности ограничения, оно не используется этим валидатором.

Валидатор

  1. Валидатор должен быть наследником ConstraintValidator.
  2. Инициализирует валидатор любым требуемым набором данных в аннотации Constraint. этот метод гарантированно будет вызываться перед любым методом в классе Validator.
  3. Метод выполняет фактическую проверку, для простоты isValid выполняет простую проверку, проверяя, что значение поля не содержится в атрибуте not notAllowValues .

ПРИМЕЧАНИЕ. Spring сканирует все классы, которые являются наследниками ConstraintValidator, и загружает их в контекст в качестве валидаторов, также учитывая это, мы можем внедрять и получать доступ к другим bean-компонентам, как мы обычно получаем доступ в других bean-компонентах.

Использование нового ограничения

Здесь мы используем настраиваемое ограничение NotContains, чтобы предотвратить использование некоторых значений firstName и LastName. Мы также можем заметить, что возможно смешивание пользовательских и встроенных ограничений.

мы также используем атрибут message, чтобы указать ответное сообщение, когда атрибут недействителен, сообщение интерполируется с использованием EL (языка выражений) для ссылки на некоторые значения динамических атрибутов, такие как notAlloweValues в случае ограничения NotContains.

Подтверждающий запрос

Чтобы проверить тело запроса, нам просто нужно указать Spring сделать это, аннотируя аргумент тела запроса с помощью @Valid. Spring использует проверку Java Bean за счет использования реализации Hibernate Validator.

Настройка ответа на недействительный запрос

Spring выдает MethodArgumentNotValidException, если аргумент недействителен. Чтобы настроить ответ конечной точки, мы воспользуемся возможностью обработки исключений Spring.

  1. @ExceptionHandler Указывает Spring, какой тип исключения следует обрабатывать.
  2. Мы извлекаем все ошибки недопустимого поля, они содержат метаданные проверки для каждой проверки, которая не прошла для определенного атрибута bean.
  3. Создание карты, которая будет возвращена в формате JSON, содержащем путь к конечной точке и массив с ошибками поля.

ДЕМО!

Давайте отправим недопустимое значение запроса и посмотрим, как наше приложение ответит красивым и легким для понимания ответом об ошибке.

Увидев полученный ответ, мы можем заметить, что Bean Validation может отслеживать несколько неудачных проверок для нескольких атрибутов bean, поэтому мы можем создавать расширенные ответы, чтобы позволить клиенту API, что было неправильно, или даже отображать эти ошибки в пользовательском интерфейсе.

С помощью этого руководства мы могли увидеть, как добавить проверку bean-компонента в наше загрузочное приложение Spring и расширить его в соответствии с нашими особыми требованиями.

Надеюсь, вы нашли это руководство полезным и сможете интегрировать эту технику в свой следующий проект. Вы можете найти код этого руководства на GitHub.