1: Основы сгибания
1. Введение:
Используя аннотации аннотаций, чтобы добавить ограничения к атрибутам класса или класса, проверьте законность значения атрибута во время выполнения.
2. Функция:
Проверка параметров очень важна в разработке интерфейса API, поскольку клиент может пройти меньше параметров, или значение является незаконным, или даже значение параметра является вредоносным, поэтому должна быть проверена законность параметров, передаваемых клиентом. Среди них аннотирование правил проверки значений параметров для атрибутов посредством аннотации является относительно элегантным способом.
3. Обычно используемые аннотации ограничения
4. Получите первую склонную валидатор
Открытый адрес класса {@notnull Private String Line1; частная строка Line2; частная строка Zip; частное строковое состояние; @Length (max = 20) @notnull частная строка страна; @Range (min = -2, max = 50, message = "floor ut hare") public int floor; // getter && setter}Два: интеграция проверки сгибального валидатора
Этот пример интегрирован на основе интеграции SpringMVC+FastJson (//www.vevb.com/article/139094.htm). Сначала вы можете посмотреть на эту статью (с исходным кодом для загрузки) и интегрировать Hibernate-Validator на основе этой статьи.
Шаги интеграции:
1. Введите зависимость с гибернат-валидатором в pom.xml
<Depective> <groupid> org.hibernate </GroupId> <artifactid> hibernate-Validator </artifactId> <sersive> 5.4.1.final </version> </deperency>
2. Настройте валидатор в [xxx] -servlet.xml: hibernatevalidator
<!-<MVC: Annotation-iliven> Добавить атрибут validator valyator = "varidator"-> <MVC: Annotation-управляемый validator = "validator"> <MVC: Сообщения-конвертерс-регистрации defaults = "true"> <!-Configure FastJson, чтобы заменить оригинальную поддержку Jackson-> <Bean> name = "Поддержка"> <Silect> <> <siled> <> <siled> <> <celect> <> <bean> <properation = "" <dulch> text/html; charset = utf-8 </value> <dall> Application/json </value> </list> </property> <name = "features"> <Sist> <date> QuotefieldNames </value> <dulch> writemapnullvale </value> </list> </property> </bean> </mvc: messive-converter id = "varidator"> <name = "vaduerclass" value = "org.hibernate.validator.hibernatevalidator"/> <name = "validationmessource" ref = "messageSource"/> </bean> <bean id = "Сообщения"> name = "baseNames"> <dist> <dulch> classpath: conforts/valids/cells/valids/vide- <dulch> classpath: org/hibernate/validator/validationmessages </value> </list> </свойство> <name = "useCodeAsDefaultmessage" value = "false"/> name = "defaultEncoding" value = "utf-8"/> <name = "cacheseconds" value = "60"/> </bean> </> <свойство = "cacheseconds" = "60"/> </bean> "/> <свойство =" cacheseconds ".
3. Определите файл файла проверки.
Validation.common.not.null = Это поле не может быть пустым валидацией.
4. Создайте новый класс объектов для тестирования
Пользовательский
Пакет com.mengdee.manage.validator; импорт javax.validation.constraints.min; импорт javax.validation.constraints.notnull; импорт javax.validation.constraints.null; импорт javax.validation.constraints.pattern org.hibernate.validator.constraints.length; import org.hibernate.validator.constraints.notblank; Public Class Userentity {@null (группы = {groupa.class}) @notnull (группы = {groupb.class}) @min (значение = 1, сообщение = » идентификатор; @Notblank (group = {groupa.class, groupb.class}) @pattern (regexp = "^(?! [0-9]+$) (?! Groupb.class}) Private String Password; @Notblank (group = {groupa.class, groupb.class}) @pattern (regexp = "^((13 [0-9])) | (15 [^4, // d]) | (18 [0,3-9])) // d {8} $", сообщение = «Сообщение = формат номера мобильного телефона-неверно") частная строка телефон; @Notblank (group = {groupb.class}) @length (min = 6, max = 12, message = "Длина никаме составляет от 6 до 12 бит") частное ник; @Min (value = 18, message = "{valyation.param.age}") private int age; @Notblank (group = {groupa.class}) @email (message = "{validation.common.format.error}") частная строка электронной почты; @Notblank @length (min = 3, max = 10, message = "{validation.common.not.range}") private String username; public userentity () {} public long getId () {return id; } public void setId (long id) {this.id = id; } public String getNickName () {return chicname; } public void setnickName (String Nickname) {this.nickName = никнам; } public int getage () {return Age; } public void setage (int age) {this.age = age; } public String getEmail () {return Email; } public void setEmail (string email) {this.email = email; } public String getPassword () {return пароль; } public void setPassword (String password) {this.password = password; } public String getUsername () {return username; } public void setUsername (string username) {this.username = username; } public String getPhone () {return Phone; } public void SetPhone (String Phone) {this.phone = phone; }}Usermodel
Пакет com.mengdee.manage.validator; import javax.validation.constraints.min; импорт javax.validation.constraints.pattern; импорт org.hibernate.validator.constraints. org.hibernate.validator.constraints.notblank; public class usermodel {@min (value = 1, message = "Идентификационное значение должно быть больше 0") частный длинный идентификатор; @Notblank @length (min = 6, max = 12, message = "Длина никама составляет от 6 до 12 цифр"). @Min (value = 18, message = "{valyation.param.age}") private int age; @Notblank @email (message = "{validation.common.format.error}") частная строка электронной почты; @Notblank @pattern (regexp = "^(?! [0-9]+$) (?! [A-za-z]+$) [0-9a-za-z] {6,20} $", Message = "Композиция из 6-21 букв и цифр, не может быть чистыми числами или чистым английским") приватным строковым паролем; @Notblank @length (min = 3, max = 10, message = "{validation.common.not.range}") private String username; @Notblank @pattern (regexp = "^((13 [0-9]) | (15 [^4, // d]) | (18 [0,3-9])) // d {8} $", message = "Формат мобильного телефона неверен") Private String Phone; public usermodel () {} public long getId () {return id; } public void setId (long id) {this.id = id; } public String getNickName () {return chicname; } public void setnickName (String Nickname) {this.nickName = никнам; } public int getage () {return Age; } public void setage (int age) {this.age = age; } public String getEmail () {return Email; } public void setEmail (string email) {this.email = email; } public String getPassword () {return пароль; } public void setPassword (String password) {this.password = password; } public String getUsername () {return username; } public void setUsername (string username) {this.username = username; } public String getPhone () {return Phone; } public void SetPhone (String Phone) {this.phone = phone; }}Userdetail:
пакет com.mengdee.manage.validator; import org.hibernate.validator.constraints.notblank; public class userdetail {private Long Id; @Notblank частный строковый адрес; @Notblank Private String Company; public userdetail () {} public long getId () {return id; } public void setId (long id) {this.id = id; } public String getAddress () {return Adder; } public void setAddress (строковый адрес) {this.address = address; } public String getCompany () {return Company; } public void setCompany (String Company) {this.company = company; }}Тестирование с ValidController
Пакет com.mengdee.manage.controller; import javax.servlet.http.httpservletrequest; import javax.validation.valid; импорт org.springframework.stepolype.controller; импорт org.springframework.validation.BindingResult; org.springframework.validation.fielderror; import org.springframework.web.bind.nantation.requestmapping; импорт org.springframework.web.bindtation.requestmethod; import org.spramework.web.bindation.ressonse; com.mengdee.manage.validator.usermodel;@controller@requestmapping ("/value") public class validcontroller extends basecontroller {// http: // localhost: 8081/platform-springmvc-webapp/valive/test? age=18&nickname=mengdee&id=1&[email protected]&password=root123&username=123&phone @Responsebody объекта проверка (httpservletRequest, @valid usermodel пользователь, BindingResult bindingResult) {if (bindingResult.haserrors ()) {fielderror fielderror = bindingResult.getfielderror (); вернуть Super.ResponseJsonError (Fielderror); } вернуть "OK"; } // Метод проверки нескольких объектов в одно и то же время требует связывания множественных результатов. Появляется @Valid, который соответствует привязке, объявленной позже. @RequestMapping (value = "/test2", method = requestMethod.get) public @ResponseBody объект Validationmore (httpservletRequest, @valid usermodel пользователь, BindingResult bindingResult, @valid userdetail, userDetail, bindingResultReslsult2) {iffingResult. fielderror = bindingResult.getFielderRor (); вернуть Super.ResponseJsonError (Fielderror); } if (bindingResult2.haserrors ()) {fielderror fielderror = bindingresult2.getfielderror (); вернуть Super.ResponseJsonError (Fielderror); } вернуть "OK"; }}Примечания об использовании:
1. Для нескольких полей порядок проверки системы, по -видимому, отличается от порядок объявления полевого декларации, как если бы он не нужен.
2. Для каждой проверки, если нет атрибута сообщения, система будет использовать по умолчанию, например, соответствующий @notblank, эквивалентна @notblank (message = "не может быть пустым")
3. Для эталонных типов, таких как строка, вы должны использовать его в сочетании с @notnull, @notempty или @notblank. Если вы не пишете пустое ограничение, после тестирования, это поле не будет участвовать в проверке. Если вы используете @pattern, @length, @email и т. Д. В одиночку, это не будет проверено. Вы должны использовать пустое ограничение, чтобы ограничить его.
@Min: используется для основных типов данных, таких как Int, Long и т. Д.
@Notnull: значение любого объекта не может быть нулевым
@Notempty: элемент объекта сбора не 0, то есть коллекция не пуста, и его также можно использовать для строк, а не нулевых
@Notblank: он может использоваться только для строки, а не нулевой, а длина в строковой Trim () будет больше 0
Три: групповая проверка @validated
1. Роль группировки (сценарий использования):
Каждое ограничение аннотации проверки имеет групповой атрибут, который используется для указания, к какой группе принадлежит ограничение. Таким образом, несколько наборов ограничений могут быть настроены в одном и том же поле. При его использовании вам нужно только указать, какой набор ограничений использовать. Например, при регистрации пользователей и изменении пользовательской информации идентификатор должен быть пустым при регистрации, и идентификатор не должен быть пустым при изменении информации пользователя. При его использовании вам нужно только назначить эти два ограничения различным группам. Например, при добавлении, использование ограничений группы А и использование ограничений группы В при обновлении.
2. Пакет - это пустой интерфейс
Groupa и Groupb
Пакет com.mengdee.manage.validator; Public Interface Groupa {} пакет com.mengdee.manage.validator; Public Interface GroupB {}При использовании @Validated ({GroupA.Class})
3. Групповая последовательность @group -последовательность
По умолчанию проверка ограничений различных групп неупорядочена, и групповая последовательность проверяется в последовательности в группе до и после порядка, таких как сначала проверка ограничений группы Groupa, а затем проверка ограничений группы GroupB. Например, если есть требования к порядок проверки групп, вы должны сначала проверить группу A, а затем проверить группу B, вы можете использовать @group -последовательность, чтобы определить порядок каждой группы
Используйте сценарии:
(1) Проверка ограничений во второй группе полагается на стабильное состояние для запуска, и это стабильное состояние подтверждается первой группой.
(2) Проверка определенной группы занимает много времени, а частота использования ЦП и памяти относительно велика. Лучший выбор - поставить его в последний раз для проверки. Следовательно, при выполнении проверки группы все еще необходим упорядоченный метод проверки, который предлагает концепцию групповой последовательности.
Группа может быть определена как последовательность других групп, и она должна соответствовать порядку, указанному в последовательности при использовании для проверки. При использовании проверки групповых последовательностей, если проверка группы до сбоя последовательности не будет, последующие группы больше не будут проверены.
Определить групповую последовательность с использованием аннотационной групповой последовательности: Groupab
Пакет com.mengdee.manage.validator; import javax.validation.group sequestence; @group sequestence ({groupa.class, groupb.class}) Общедоступный интерфейс Groupab {ValidationController
пакет com.mengdee.manage.controller; import javax.servlet.http.httpservletrequest; import org.springframework.stereotype.controller; import org.springframework.validation.BindingResult; импорт org.spramework.validation.fielderriT org.springframework.validation.annotation.validated; импорт org.springframework.web.bindtation.requestmapping; импорт org.springframework.web.bind.annotation.requestmethod; импорт org.spramework.web.bind.annotation com.mengdee.manage.validator.groupa; import com.mengdee.manage.validator.groupab; import com.mengdee.manage.validator.groupb; import com.mengdee.manage.validator.userentity;@controller@requestmapping ("/valyted") public class veliveconconconconcon extraller extraller extraller указано во время проверки, так что проверены только ограничения, содержащие Groupa. Если нет включения, не будет проверки. Например, для телефона группа, указанная @notblank, и @pattern, не указывает группу, затем проверяется только одно ограничение, а формат мобильного телефона не проверяется // http: // localhost: 8081/platform-springmvc-webapp/valyted/groupa? Password = root123 & phone = 123 @Requestmappoppening (quest queply ', vallated/groupa? RequestMethod.get) public @ResponseBody Object GroupA (httpservletRequest запрос, @validated ({groupa.class}) Пользователь пользователя, BindingResult bindingResult) {if (bindingResult.haserrors ()) {fielderror fielderror = bindingresult.getderror (); вернуть this.ResponseJsonError (Fielderror); } вернуть "OK"; } // http: // localhost: 8081/platform-springmvc-webapp/valyated/groupb? Phone = 123 & password = root123 & id = 1 @requestmapping (value = "/groupb", method = requestmethod.get) public @ResponseBody GroupB (httpServeltrequest, @validated ({{@ResponseBody GroupB (httpServeltrequest, @validated ({{{{{{{{{{{{{{{{@ResponseBode-объектный Group BINDINGRESULT BINDINGRESULT) {if (bindingResult.haserrors ()) {fielderror fielderror = bindingresult.getfielderror (); вернуть this.ResponseJsonError (Fielderror); } вернуть "OK"; } // Groupab // http: // localhost: 8081/platform-springmvc-webapp/valyated/Groupab? Phone=111&password=rot123&nickname=123&[email protected] // @validated ({Groupa.class, Groupb.clas база данных. Пока одно условие будет выполнено, ограничение будет проверено. Используйте несколько групп одновременно, чтобы отметить, что в последовательности нет атрибута между несколькими группами. Это не означает, что группа A сначала, а затем проверить группу B. // Поскольку ограничения идентификатора пусты и непусты, атрибут прокомментируется первым @Requestmapping (value = "/groupab", method = requestmethod.get) public @ResponseBody Object Groupab (httpserveltrequest, @validated ({GroupA.class-Class-Class.class. BINDINGRESULT BINDINGRESULT) {if (bindingResult.haserrors ()) {fielderror fielderror = bindingresult.getfielderror (); вернуть this.ResponseJsonError (Fielderror); } вернуть "OK"; } // default // http: // localhost: 8081/platform-springmvc-webapp/default? [email protected]&age=18 // @validated, если группы не указаны, убедитесь, что атрибут группы не существует (так же, как функция @valid в это время). Если на поле есть несколько ограничений, группа не должна быть указана. Если указанная группа частично ограничена, а частичные ограничения не указывают ограничение, то @Requestmapping (value = "/default", method = requestMethod.get) не проверяется при использовании @Validated @ResponseBody Object DefaultGroup (httpservletrequest, запрос @validity userentity, связывающий обратный доступ) {us infulsult) {usfulsultresultresult). (bindingResult.haserrors ()) {fielderror fielderror = bindingresult.getfielderror (); вернуть this.ResponseJsonError (Fielderror); } вернуть "OK"; } // localhost: 8081/platform-springmvc-webapp/valyated/sequence? Phone = 123 & password = root123 & email = 123 & nickname = 123 // для множественных ограничений на свойство, а множественные ограничения не все в той же группе, порядок проверки проверяется в соответствии с порядок, определяемые на групповой последовательности @Requestmepence (значение = «Здравоохранение». RequestMethod.get) public @ResponseBody объект последовательности объекта (httpservletRequest, @validated ({Groupab.class}) Пользователь пользователя, BindingResult bindingResult) {if (bindingResult.haserrors ()) {fielderror fielderror = supparresult.gletderror (); вернуть this.ResponseJsonError (Fielderror); } вернуть "OK"; }}Четыре: аннотация проверки сгибания с гибернатом
Когда аннотация, предоставленная проверкой Hibernate, не может соответствовать требованиям, вы можете настроить ограничения проверки.
Пользовательские аннотации Шаги:
Создайте аннотацию @Phone
пакет com.mengdee.manage.validator; import java.lang.annotation.target; импорт javax.validation.constraint; импорт javax.validation.payload; импорт static java.lang.annotation.elementtype.annotation_type; импорт static java java.lang.annotation.elementtype.field; импорт статический java.lang.annotation.elementtype.method; импорт static java.lang.annotation.elementtype.parameter; импорт Static java.lang.annotation.retentionpolicy.Runtime java.lang.annotation.retention; @Target ({метод, поле, Annotation_Type, Constructor, Parameter})@horeatury (Runtime)@Doccordated@constraint (valytedBy = {PhoneConstraint.class}) public @Interface Phone {String Message () по умолчанию "MOBLIC Number Format Format"; String regexp () по умолчанию "^(13 [0-9]) | (15 [^4, // d]) | (18 [0,3-9])) // d {8} $"; Class <?> [] Groups () default {}; Класс <? Extends Payload> [] PAYLOAD () DEFALT {}; @Target ({Method, Field, Annotation_type, Constructor, Parameter}) @retention (Runtime) @documenced public @Interface List {phone [] value (); }}Создайте класс проверки ограничений, соответствующий аннотации номера мобильного телефона
пакет com.mengdee.manage.validator; import javax.validation.constraintvalidator; импорт javax.validation.constraintvalidatorContext; открытый класс PhoneConstraint реализует ConstraintValidator <Phone, String> {Private String Regexp; @Override public void инициализируется (Phone Phoneannotation) {this.regexp = phoneannotation.regexp (); } @Override public boolean isvalid (строковое значение, контекст constraintValidatorContext) {if (value == null) {return true; // HV000028: неожиданное исключение во время ISVALID CALL} if (value.matches (regexp)) {return true; } вернуть false; }}Используйте аннотацию @Phone на атрибутах
пакет com.mengdee.manage.validator; import org.hibernate.validator.constraints.notblank; public class userdetail {@notblank @phone private String Phone; public userdetail () {} public String getPhone () {return Phone; } public void SetPhone (String Phone) {this.phone = phone; }}Тестовые примечания
// http: // localhost: 8081/platform-springmvc-webapp/valive/test3? address = 123 & company = 456 & phone = 123 @requestmapping (value = "/test3", method = requestmethod.get) public @ResponseBody ValidationCustomannatation (httpservelcerveltrequest, @vesponsebody validationcustomannatation (httpservelgerveltrevelte, @vesponsebodybody, usdetridetletle, @vesponsebodybody-exturaldet BindingResult) {if (bindingResult.haserrors ()) {fielderror fielderror = bindingResult.getFielderRor (); вернуть Super.ResponseJsonError (Fielderror); } вернуть "OK"; }Загрузите полный код: http://xiazai.vevb.com/201804/yuanma/platform-springmvc-webapp(vevb.com).rar
Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.
Справочная статья: