Предисловие
Компонент валидатора структуры Spring является вспомогательным компонентом, который очень полезен для целостности и достоверности данных. Определяя определенный валидатор, его можно использовать в других местах, где это необходимо, и это очень распространено.
Перед выполнением бизнес -логики необходимо убедиться, что полученные входные данные являются законными и корректными посредством проверки. Однако много раз одинаковая проверка происходит много раз, что приводит к избыточности кода, потраченному впустую времени и нарушает сухой принцип.
Вы можете рассмотреть возможность инкапсулирования кода проверки для решения этих проблем.
JSR-303
JSR-303-это стандартная структура, предоставленная Java для проверки законности данных. Он определяет набор аннотаций проверки, которые могут быть аннотированы по переменным членам и методам атрибутов.
В валидации Hibernate предоставляет этот набор стандартных реализаций. Когда мы вводим Spring Boot Web Starter или Vescript Boot Wardation, проверка Hibernate будет введена по умолчанию.
Пример использования
Сказав так много чепухи, добавьте код.
1. Представьте проект Springboot
<depervice> <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-web </artifactid> </depervice> <dehydency> <groupid> org.бит <groupId> org.projectlombok </GroupId> <ratifactid> lombok </artifactid> </depertion>
2. Написать объекты проверки
@Datapublic class Пользователь {// Имя не разрешено быть пустым, а длина имени составляет от 2 до 30 бит // Если длина имени не проходит, то сообщение об ошибке рекомендуется @notnull @size (min = 2, max = 30, message = «Пожалуйста, проверьте, есть ли какая -либо проблема с именем») // имя не разрешено быть пустым, а минимальный возраст составляет 18 @notnull @min (18) Частный целый возраст;}3. Создать контроллер
@SpringBootApplication@RestControllerPublic Class UserApplication {public static void main (string [] args) {SpringApplication.run (userApplication.class, args); } // 1. Add @Valid annotation before the parameter to be checked// 2. Follow it immediately, follow a BindingResult to store the verification information @RequestMapping("/test1") public Object test1( @Valid User user, BindingResult bindingResult ) { // If there is a problem with the verification, an error message will be returned// Here we return all the error information. Фактически, пользовательская информация может быть возвращена в соответствии с методом BindingResult по мере необходимости. // Обычное решение: JSR-303 + Global ExceptionHandler if (bindingResult.haserrors ()) {return bindingResult.getAllerrors (); } вернуть "OK"; }} 4. Запустите приложение
После краткой демонстрации результатов операции можно увидеть, что структура проверки вступила в силу.
Проверьте возраст
Проверьте имя
Проверка прошла
Общие аннотации проверки
@Null Аннотированный элемент должен быть нулевым
@Notnull Аннотированный элемент не должен быть нулевым
@AssertTrue Аннотированный элемент должен быть правдой
@AssertFalse Аннотированный элемент должен быть ложным
@Min (значение) Аннотированный элемент должен быть числом, а его значение должно быть больше или равным указанному минимальному значению.
@Max (значение) Аннотированный элемент должен быть числом, а его значение должно быть меньше или равным указанному максимальному значению.
@Decimalmin (значение) Аннотированный элемент должен быть числом, а его значение должно быть больше или равным указанному минимальному значению
@Decimalmax (значение) аннотированный элемент должен быть числом, а его значение должно быть меньше или равным указанному максимальному значению
@Size (max =, min =) Размер аннотированного элемента должен быть в пределах указанного диапазона.
@Digits (целое число, фракция) Аннотированный элемент должен быть числом, и его значение должно быть в приемлемого диапазона.
@Past Аннотированный элемент должен быть датой прошлой
@Future аннотированный элемент должен быть будущей датой
@Pattern (regex =, flag =) аннотированный элемент должен соответствовать указанному регулярному выражению
Проверьте аннотации, предоставленные warmernate vadytor:
@Notblank (message =) Убедитесь, что строка не является нулевой и должна быть больше 0
@Email Аннотированный элемент должен быть адресом электронной почты
@Length (min =, max =) Размер аннотированной строки должен быть в пределах указанного диапазона.
@Notempty. Комментарийная строка должна быть не пустой
@Range (min =, max =, message =) аннотированный элемент должен быть в соответствующем диапазоне
Пользовательская проверка аннотации
Иногда тип проверки, который мы хотим, не находится в сторонней библиотеке. К счастью, система предоставляет хорошие возможности расширения, и мы можем настроить проверку.
Например, мы хотим проверить формат мобильного телефона пользователя и написать устройство проверки номера мобильного телефона.
1. Напишите аннотации проверки
// Мы можем напрямую скопировать аннотацию в системе, например @min, скопировать ее в нашу новую аннотацию, а затем изменить ее по мере необходимости. @Target ({Method, Field, Annotation_type, Constructor, Parameter})@harepention (runtime)@документирован // класс реализации аннотированных. @Constraint (valytedby = {ismobilevalidator.class}) public @Interface isMobile {// Информация по умолчанию для проверки ошибок string message () по умолчанию «Существует проблема с форматом номера мобильного телефона»; // Будь то подчеркнуть проверку Boolean Isrequired () по умолчанию false; Class <?> [] Groups () default {}; Класс <? Extends Payload> [] Payload () Default {};} 2. Напишите конкретные классы реализации
Мы знаем, что аннотации - это всего лишь знак, и реальная логика должна быть реализована в определенном классе. Аннотация на предыдущем этапе указывает, что класс, который реализует функцию проверки, является Ismobilevalidator.
// Пользовательские аннотации должны реализовать интерфейс ConstraintValidator, два параметра в нем // Первое - это конкретная аннотация, которая будет проверена // Второй - тип параметров проверки открытого класса Ismobilevalidator реализует ConstraintValidator <ISMobile, String> {Private Boolean Tevle = false; Private Static Final Pattern mobile_pattern = pattern.compile ("1 // d {10}"); // Метод инструментов, определите, является ли это номером мобильного телефона Public Static Boolean Ismobile (String src) {if (stringutils.isempty (src)) {return false; } Matcher m = mobile_pattern.matcher (src); вернуть m.matches (); } @Override public void инициализация (Ismobile constraintantation) {обязательно = constraintantation.isrequired (); } @Override public boolean isvalid (строковый телефон, constraintValidatorContext constraintValidatorContext) {// Это реализация номера мобильного телефона, если (требуется) {return isMobile (телефон); } else {if (stringUtils.isempty (телефон)) {return true; } else {return ismobile (телефон); }}}} 3. Проверьте функцию пользовательских аннотаций
@Datapublic class Пользователь {@notnull @size (min = 2, max = 30, message = "Пожалуйста, проверьте, есть ли какая -либо проблема с длиной имени") частной строки; @Notnull @min (18) Частный целый возраст; // это недавно добавленная аннотация @ismobile private String Phone;}4. Тест
проходить
Есть проблема с номером мобильного телефона
Видно, что настраиваемая аннотация вступила в силу.
Мы также можем продолжать оптимизировать это место и создавать новое глобальное исключение. Если проверка не удается, добавьте глобальные бизнес-исключения, поймайте бизнес-исключения, а затем верните удобную информацию.
дополнительный
Он также может пройти проверку метода.
1. Добавить аннотацию @validated в контроллер
2. Добавьте аннотации проверки, @min, @max и т. Д. В метод контроллера.
@Velyated@restcontroller@springbootapplicationpublic class userapplication {public static void main (string [] args) {springapplication.run (userapplication.class, args); } @RequestMapping ("/test2") public String Test2 (@Ismobile String Phone) {return Phone + "ok"; } @ExceptionHandler (constraintViolationException.class) @Responsebody public Object handleConstraintViolationException (constraintViolationException cve) {hashset <string> messageSet = new hashset (); for (ограничение ограничения: cve.getConstraintViolations ()) {messageSet.Add (constraintViolation.getMessage ()); } возвращать сообщения; }} Правила проверки класса
наконец
Используя устройство проверки, нам больше не нужно проверять все контроллеры. Если код намного освежает, это будет. Мы пишем код очень кратко, но мы должны подумать о том, как писать код проще, более четкий и более благоприятный для технического обслуживания. Написание дубликата кода - пустая трата вашего времени.
Когда вы столкнетесь с проверкой параметров в будущем, первое, о чем вы думаете, - это не проверять ее напрямую. Вы можете узнать, написали ли вы определенный тип проверки и можете использовать его напрямую.
Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.