Введение
Проверка аннотаций с использованием Spring MVC может напрямую проверять простые данные модели представления. Обратите внимание, что это просто. Если проверка данных модели требует более сложной бизнес -логики, трудно использовать аннотацию для проверки.
Ниже приведена проверка аннотаций с использованием Spring MVC, а также пример проверки аннотации @TEL, который имеет:
1. Поддержка многоязычной (интернационализация)
2. Сначала преобразовать данные по умолчанию. Например, если тип INT и даты передается в пустом значении, будет брошено исключение. Данное значение по умолчанию будет дано.
Сначала посмотрим на конфигурацию:
1. web.xml
<? xml version = "1.0" Encoding = "utf-8"?> <web-app arser = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://www.w3.org/2001/xmlschema electsmance "/www.w3. xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xcsd" hispect-mal-mlame> <plase-name> 1 </display-name> <context-param> <param-name> contextConfiglocation </param-name> <value> classpath: spring.xml </param-value> </context-param> <servlet> <servlet-name> Dispatcher </servlet-mame> <servlet-class> org.spramework.web.serserserserserserserserserserserserserserserserserserserserserserserserserserserserserserfore> org.spramework. <init-param> <param-name>contextConfigLocation</param-name> <param-value></param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <listener> <lloader-class> org.springframework.web.context.contextloaderListener </sluster> </sluster> <selcload-file-list> <welcelporting> index.jsp </wervedied-file> </werveding-file-list> </web-app>
Здесь нечего сказать, просто добавьте конфигурацию spring.xml в контекст -конфиглокация
2. Spring.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: tx = "http://www.springframework.org/schema/tx" xmlns: context = "http://www.springframework.org/schema/context" xmlns: mvc = "http://www.springframe.orns: mvc =" http://www.springframe.ormshore. xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.spramework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context/spring-3.0.xsd http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.spramework.org/schema/mvc/spring-mv.3. <!-Описание аннотации-> <Контекст: Annotation-config /> <!-Поддержка сопоставления аннотаций по умолчанию-> <MVC: Annotation-управляемый validator = "validator" конверсион-service = "confurtionservice" /> <!-Конвертировать класс Marked @Controller Annotation в Bean-> <context: component-scan base-package = "com.my annotation в Bean-> <context: component-scan-package =" com.my ntoprentation- /> <! <name = "prefix" value = "/web-inf/vision/"/> <name = "suffix" value = ". jsp"/> <!-Может быть пустым, удобно для реализации логики класса интерпретации представления на основе расширения-> <proport name = "viewClass" value = "org.spramework.web.servlet.view.jstlVas сообщения. id = "conversionservice"> <name = "name =" converters "> <list> <bean/> <bean/> </list> </property> </bean> </beans>
Добавьте конверсию-сервис в <mvc: annotation-raven/>, а затем добавьте системный преобразователь по умолчанию в конверсию. Например, есть Intconverter и DateConverter выше. Конечно, он также может быть настроен и другие типы, что является глобальным.
Многоязычные свойства добавляются в валидатор Validator. Конечно, многоязычный язык Spring основан на языке приема HTTP Header.
3. Контроллер
пакет com.my.controller; import java.util.list; import javax.validation.valid; import org.springframework.stereotype.controller; импорт org.springframework.validation.bindingResult; импорт org.spramework.validation.fielderror org.springframework.web.bind.annotation.modelattribute; import org.springframework.web.bind.annotation.requestmapping; импорт org.springframework.web.bind.annotation.requestmethod; импорт org.spramework.web.servlet.modelandVew; com.my.controller.bean.user4;@controller@requestmapping (value = "av") открытый класс testannotationvalidcontroller {@Requestmapping public modelandView index () {modelandView view = new ModelAndView ("/testannotationValid/index", "user4", new user44 ("); вернуть представление; } @RequestMapping (value = "/add", method = requestMethod.post) public modelandView add (@modelattribute @valid user4 user, bindingresult result) {modelandView = new ModelandView ("/testannotationValid/index"); view.addobject ("user4", user); if (result.haserrors ()) {list <fielderror> ошибки = result.getfielderrors (); для (Fielderror err: errors) {System.out.println ("ObjectName:" + err.getObjectName () + "/tfieldName:" + err.getfield () + "/tfieldvalue:" + err.getRecteDValue () + "/tmessage:" + err.getDefault () + "/tcessage:" + err.getdefault () + "/tmessage:" + err.getdefault () + "; }} return View; }}Это простой контроллер, в добавлении есть аннотация @Valid, которая требуется, не добавляя этого, проверка аннотации не будет работать
4. user4.java model class
пакет com.my.controller.bean; import java.util.date; import javax.validation.constraints.max; import javax.validation.constraints.min; import javax.validation.constraints.notnull; импорт javax.validation.constraints.constrations.constrations.constration. javax.validation.constraints.size; import org.hibernate.validator.constraints.email; import org.hibernate.validator.constraints.length; import org.hibernate.validator.constraints.notblank; открытый пользователь 4 {private Long Id; @Notblank (message = "{valive.name}") частное имя строки; @Length (min = 4, max = 20, message = "{valive.password}") Private String Password; @Notblank (message = "{valive.required}") @email (message = "{valive.email}") частная строка электронной почты; @Notnull (message = "{valive.required}") private boolean женат; @Min (value = 18, message = "{valive.agemin}") @max (value = 100, message = "{valid.agemax}") private int age; @Notnull (message = "{valive.required}") @past (message = "{valive.birthday}") частная дата день рождения; @Pattern (regexp = "^[a-za-z] {2,} $", message = "{valid.address}") частный строковый адрес; @Size (min = 1, message = "{valive.likesmin}") частная строка [] likes; @com.my.controller.validator.tel (message = "{valive.tel}", min = 3) частная строка Tel; public long getId () {return id; } public void setId (long id) {this.id = id; } public String getName () {return name; } public void setName (string name) {this.name = name; } public String getPassword () {return пароль; } public void setPassword (String password) {this.password = password; } public String getEmail () {return Email; } public void setEmail (string email) {this.email = email; } public boolean ismarried () {return женат; } public void setMarried (Boolean женат) {this.married = женат; } public int getage () {return Age; } public void setage (int age) {this.age = age; } public date getBirthDay () {return Birthday; } public void setBirthDay (дата рождения) {this.BirthDay = день рождения; } public String getAddress () {return Adder; } public void setAddress (строковый адрес) {this.address = address; } public String [] getLikes () {return Likes; } public void setlikes (string [] likes) {this.likes = likes; } public String getTel () {return tel; } public void Settel (String tel) {this.tel = tel; }}Помимо @Tel, остальные - это аннотации, которые идут с весной. Конечно, есть другие. Ищите это самостоятельно.
5. Message.properties
vitive.Required = значение поля не может быть пустым value.name = Имя пользователя не может быть пустоваренным. vassword = минимальный пароль действительна. Aagemin = возраст не может быть меньше, чем {1} лет old value.agemax = возраст не может быть больше, чем {1} лет ровный. Минимальное предпочтение не может быть меньше 1 Valid.tel = номер мобильного телефона не может быть меньше, чем {min}Соответствующее значение сообщения аннотации модели пользователя4. Если вам нужен международный многоязычный, вам нужно только добавить дополнительный файл с именем сообщений_en_us.properties.
6. @tel
Пакет com.my.controller.validator; import java.lang.annotation.elementtype; импорт java.lang.annotation.retention; импорт java.lang.annotation.retentionpolicy; импорт java.lang.annotation.target; импорт javax.validation.constraint; javax.validation.payload; @target ({elementtype.field, elementtype.method})@artentention (armentpolicy.runtime) @constraint (valyatedby = telvalidator.class) public @Interface tel {int min () по умолчанию 0; String message (); Class <?> [] Groups () default {}; Класс <? Extends Payload> [] Payload () Default {};}Создайте новый интерфейс. Обратите внимание, что интерфейс аннотации Java написан так: @Interface
Telvalidator:
пакет com.my.controller.validator; import javax.annotation.resource; импорт javax.validation.constraintvalidator; импорт javax.validation.constraintvalidatorContext; импорт org.springframework.context.support.resourcebundessuserserce; String> {@Resource Private ResourceBundLemessAgesource Speakyource; Частный тел Тел; @Override public void инициализируется (тел тел) {this.tel = tel; } @Override public boolean isvalid (строковое значение, constraintValidatorContext constraintContext) {boolean isvalid; if (value! = null && value.length ()> = tel.min ()) {isvalid = true; } else {isvalid = false; } if (! isvalid) {constraintContext.disableDefaultConstraintViolation (); ConstraintContext.BuildConstraintViolationWithTemplate (tel.Message ()). AddConstraintViolation (); } вернуть isValid; }}Это метод реализации проверки @TEL.
7. Конвертер
пакет com.my.controller.converter; import org.springframework.core.convert.converter.converter; открытый класс Intconverter реализует преобразователь <string, integer> {@override public integer integer (string text) {if (text == null || "". .Equals (text)) {return 0; } else {try {integer value = integer.parseint (text); возвращаемое значение; } catch (Exception e) {return 0; }}}} пакет com.my.controller.converter; import java.text.parseexception; import java.text.simpledateformat; import java.util.date; импорт org.springframework.core.convert.converter.converter; public class dateConverter ImplomesErater <String> {@Override new SimpleDateFormat ("yyyy-mm-dd"); dateformat.setlenient (false); try {return dateformat.parse (text); } catch (parseexception e) {e.printstacktrace (); } return null; }}Эти два являются глобальными преобразователями по умолчанию.
8. тест jsp
<%@ page language = "java" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/fmt" prefix = "fmt"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/functions" prefix = "fn"%> <%@ taglib prefix = "st" uri = "http://www.springframework.org/tags"%> <%@ taglib prefix = "sf" uri = "http://www.springframework.org/tags/form"%> <! Doctpe html public "-// w3c // dtd html html en"/enseml en "/w3c/dtd html html en" // w3c // dtd html html en "// w3c // dtd html en" "http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <title> index </title> </head> <body> <sf: форма action="${pageContext.request.contextPath}/av/add" method="post" modelAttribute="user4"> User name:<sf:input path="name"/><sf:errors path="name" /><br/> Password:<sf:input path="password"/><sf:errors path="password" /><br/> E-mail:<sf:input path="email" /><sf:errors path="email" /><br/> Age:<sf:input path="age"/><sf:errors path="age" /><br/> Birthday:<sf:input path="birthday"/><sf:errors path="birthday" /><br/> Address:<sf:input path="address"/><sf:errors path="address" /><br/> Женат: <SF: RadioButton Path = "женат" label = "yes" value = "true"/> <sf: ошибки path = "женат"/> <br/> лайки: <sf: checkbox path = "likes" label = "football" = "football"/> <sf: checkbox path = "lake" lake = badminton "value =" badminton "/> <sfbox = fekbox" shabbox = "sfbox" sfbox = "sfbox". label="Pingpong" value="Pingpong"/> <sf:errors path="likes" /><br/> Tel:<sf:input path="tel"/><sf:errors path="tel" /><br/> <input type="submit" value="Add" /> <hr/> Errors:<br/><sf:errors path="*"></sf:errors> <hr/> Likes: <C: foreach elects = "$ {user4.likes}" var = "item"> $ {item}, </c: foreach> </sf: form> </body> </html>Обратите внимание, что значение атрибута Modelattribute в форме соответствует имени класса User4, начиная с нижнего регистра, в противном случае возникнет ошибка.
9. Результаты пользовательского интерфейса страницы:
После нажатия кнопки добавить:
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.