소개
Spring MVC를 사용한 주석 검증은보기 모델의 간단한 데이터를 직접 확인할 수 있습니다. 이것은 간단합니다. 모델의 데이터 검증에 더 복잡한 비즈니스 로직이 필요한 경우 검증을 위해 주석을 사용하기가 어렵습니다.
다음은 Spring MVC를 사용한 주석 확인과 Custom @Tel의 주석 검증 예제입니다.
1. 지원 다국어 (국제화)
2. 기본 데이터를 먼저 변환합니다. 예를 들어, int 및 날짜 유형이 빈 값으로 전달되면 예외가 발생합니다. 주어진 기본값이 제공됩니다.
먼저 구성을 살펴 보겠습니다.
1. web.xml
<? xml version = "1.0"encoding = "utf-8"?> <web-app version = "3.0"xmlns = "http://java.sun.com/xml/xml/ns/javaee"xmlns : xsi = "http://www.w3.org/2001/xmlschema-instance. 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.xsd"> <sclow-name> test-name> 1 </display-name> <context-param> <param-name> contextConfigLocation </param-name> <param- value> classpath : spring.xml </param- value> </context-param> <servlet-name> dispatcher </servlet-name> <Servlet-class> org.springframework.web.servlet.dispatcherServlet </servlet-class> <init-param> <param-name> ContextConfigLocation </param-name> <param-value> </param-value> </init-param> <load-on-startup> 1 </load-on-startup> <Servlet-name> 디스패처 </servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <layer> <layer-class> org.spramework.web.context.contextloaderlistener </lister-class> </lartile-list> <welcome-file> </welcome-file> </welcome-file-list> </web-app>
여기에는 할 말이 없습니다. Spring.xml 구성을 ContextConfigLocation에 추가하십시오.
2. Spring.xml
<? xml 버전 = "1.0"alcoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans"xmlns : xsi = "http://ww.w.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.spramframwork.org/schema/org/schema/gramework.org/spramwork.org/ xsi : schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvvc/sprgeran-mvc-3.0.xsd 설명-> <context : Annotation-Config /> <!-기본 주석 매핑 지원-> <mvc : mvc : "validator"conversion-service = "conversionservice" /> <!-@controller annotation으로 표시된 클래스 변환-> <context : component-scan base-package = "! 이름 = "prefix"value = "/web-inf/views/"/> <property name = "접미어"value = ". jsp"/> <!-확장자를 기반으로 뷰 해석 클래스의 논리를 구현하는 데 편리 할 수 있습니다-> <속성 이름 = "viewClass"value = "org.springframework.web.view. message.properties-> <bean id = "messageSource"> <property name = "basenames"> <slist> <value> message </value> </list> </property> </bean> <!-verifier-> <bean id = "validator"> <property name = "valicationMessource"ref = "westource"/> </bean> <<ead id = < "eD id ="<eD id = "< 이름 = "변환기"> <list> <bean/> <bean/> </list> </property> </bean> </beans>
변환 서비스를 <MVC : Annotation-Driven/>에 추가 한 다음 시스템 기본 변환기를 변환 서비스에 추가하십시오. 예를 들어, 위의 intconverter 및 dateconverter가 있습니다. 물론, 전 세계적으로 사용자 정의 및 기타 유형 일 수도 있습니다.
다국어 속성은 유효성 검사기에 추가됩니다. 물론 Spring의 다국어 언어는 HTTP 헤더의 수락 언어를 기반으로합니다.
3. 컨트롤러
package com.my.controller; import java.util.list; import javax.validation.valid; import org.springframework.stereotyp.controller; import org.spramframework.validation.bindingresult; import org.springframework.validation.fielderror; import org.springframework.web.bind.annotation.modelattribute; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestmod; import org.springframework.wepreld.modview; com.my.controller.bean.user4;@controller@requestmapping (value = "av") public class testAnnotationValidController {@requestmapping public modelandview index () {modelAndView view = new ModelAndView ( "/testAnnotationValid/index", "user4"); 리턴 뷰; } @requestmapping (value = "/add", method = requestmethod.post) public modelandview add (@modelattribute @valid user4 user, bindingResult result) {modelandView view = new ModelAndView ( "/testAnnotationTationValid/index"); view.adoBject ( "user4", user); if (result.haserrors ()) {list <fielderror> errors = result.getfielderrors (); for (fielderror err : errors) {system.out.println ( "ObjectName :" + err.getObjectName () + "/tfieldName :" + err.getField () + "/tfieldValue :" + err.getRejectedValue () + "/tmessage :" + restaultMessage ()/tcode : "); }} return view; }}이것은 간단한 컨트롤러입니다. 또한 @valid에 대한 주석이 있습니다. 추가하지 않고 주석 검증이 작동하지 않습니다.
4. user4.java 모델 엔티티 클래스
package com.my.controller.bean; import java.util.date; import javax.validation.constraints.max; import javax.validation.constraints.min; import javax.validation.constraints.notnull; import javax.validation.constraints.pormation javax.validation.constraints.size; import org.hibernate.validator.constraints.email; import org.hibernate.validator.constraints.length; import org.hibernate.validator.constraints.notblank; public user4 {private long id; @NotBlank (message = "{valid.name}") 개인 문자열 이름; @length (min = 4, max = 20, message = "{valid.password}") 개인 문자열 암호; @NotBlank (message = "{valid.required}") @email (message = "{valid.email}") 개인 문자열 이메일; @notnull (message = "{valid.required}") 사적 부울 결혼; @min (value = 18, message = "{valid.agemin}") @max (value = 100, message = "{valid.agemax}") private int age; @NotNull (message = "{valid.required}") @past (message = "{valid.birthday}") 개인 날짜 생일; @pattern (regexp = "^[a-za-z] {2,} $", message = "{valid.address}") 개인 문자열 주소; @size (min = 1, message = "{valid.likesmin}") 개인 문자열 [] 좋아요; @com.my.controller.validator.tel (message = "{valid.tel}", min = 3) private String tel; public long getid () {return id; } public void setId (long id) {this.id = id; } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } public String getPassword () {return password; } public void setpassword (문자열 비밀번호) {this.password = password; } public String getEmail () {반환 이메일; } public void seteMail (문자열 이메일) {this.email = 이메일; } public boolean ismarried () {return 결혼; } public void setMarried (부울 결혼) {this.married = 결혼; } public int getage () {반환 연령; } public void 설정 (int Age) {this.age = age; } 공개 날짜 getBirthday () {return birthday; } public void setbirthday (날짜 생일) {this.birthday = 생일; } public String getAddress () {return address; } public void setAddress (문자열 주소) {this.address = 주소; } public String [] getLikes () {return wikes; } public void setlikes (String [] likes) {this.likes = likes; } public String getTel () {return Tel; } public void settel (String tel) {this.tel = tel; }}@Tel 외에도 다른 사람들은 모두 봄과 함께 제공되는 주석입니다. 물론 다른 것들이 있습니다. 직접 검색하십시오.
5. 메시지
valid.required = 필드 값은 빈 값을 비울 수 없습니다. 이름 = 사용자 이름은 비어있을 수 없습니다. 사용자 이름은 비어있을 수 없습니다. password = 최소 비밀번호 = 최소 암호는 {1} 년보다 작을 수 없습니다. 최소 선호도는 1보다 작을 수 없습니다. Tel = 휴대 전화 번호는 {min}보다 작을 수 없습니다.User4 모델의 주석의 해당 메시지 값. 국제 다국어가 필요한 경우 Message_en_us.properties라는 이름의 추가 파일 만 추가하면됩니다.
6. @Tel
package com.my.controller.validator; import java.lang.annotation.elementtype; import java.lang.annotation.retention; import java.lang.annotation.retentionpolicy; import java.lang.annotation.target; import javax.validation.constraint; javax.validation.payload; @target ({elementtype.field, elementtype.method})@retention (retentionpolicy.runtime) @constraint (validatedby = telvalidator.class) public @interface tel {int min () default 0; 문자열 메시지 (); class <?> [] groups () default {}; 클래스 <? Payload를 확장합니다> [] payload () default {};}새 인터페이스를 만듭니다. 주석 인터페이스 Java는 다음과 같이 작성되었습니다. @interface
통신기 :
package com.my.controller.validator; import javax.annotation.resource; import javax.validation.constraintvalidator; import javax.validation.constraintvalidatorcontext; import org.springframework.context.support.resourbundlemessages <telvalidator smaldes inmestomer inmestator simpless inmestator inmpless org.springframeworth org.springframegr.springframeworth org. String> {@Resource Private ResourceBundEssagesSource MessagesOURCE; 개인 Tel Tel; @override public void initialize (tel tel) {this.tel = tel; } @override public boolean isvalid (문자열 값, restaintValidatorContext restaintContext) {boolean isvalid; if (value! = null && value.length ()> = tel.min ()) {isvalid = true; } else {isvalid = false; } if (! isValid) {SONSPAINTCONTEXT.DISABLEDEFAULTCOSSTVIOLATION (); SonstraintContext.BuildConstraintViolationwithTemplate (Tel.Message ()). addConstraintViolation (); } return isvalid; }}이것은 @tel의 검증 구현 방법입니다.
7. 변환기
package com.my.controller.converter; import org.springframework.core.convert.converter.converter; public class intconverter 구현 변환기 <string, integer> {@override public integer convert (string text) {if (text == null || "" } else {try {integer value = integer.parseint (텍스트); 반환 값; } catch (예외 e) {return 0; }}}} package com.my.controller.converter; import java.text.parseexception; import java.text.simpledateformat; import java.util.date; import org.spramework.core.convert.converter.converter; public dateconverter <{stride 텍스트 전환 (stride converstets) {stride converstets convertions (stride convertions). dateformat = new simpledateformat ( "yyyy-mm-dd"); dateformat.setLenient (false); try {return dateformat.parse (텍스트); } catch (parseException e) {e.printstacktrace (); } return null; }}이 두 가지는 글로벌 유형 기본 변환기입니다.
8. JSP 테스트
<%@ page language = "java"contmenttype = "text/html; charset = utf-8"pageencoding = "utf-8"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/core"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"%> <! doctype html public "-// w3c // w3c // "http://www.w3.org/tr/tr/html4/loose.dtd"> html> html> http-quiv ="content-type "content ="text/html; charset = utf-8 "> <title> index> </head> <sf : 양식 action = "$ {pagecontext.request.contextpath}/av/ad"method = "post"modelattribute = "user4"> 사용자 이름 : <sf : input path = "name"/> <sf : "name"/> <br/> 비밀번호 : <sf : input path = "possport"/> 경로 = "이메일"/> <sf : 오류 경로 = "이메일"/>> <br/ <br/ <br/ <br : <sf : input path = "age"/<sf : 오류 경로 = "age"/> <br/> 생일 : <sf : "생일"/> <sf : errors path = "생일"/> <br/> 주소 : <sf : 입력 경로 = "/> <sf path =" "/>>>>>>>. /> <br/> 결혼 : <sf : radiobutton path = "결혼"레이블 = "예"value = "true"/<sf : 오류 경로 = "결혼"/> <br/> 좋아요 : <sf : checkbox path = "laves"라벨 = "축구"value = "풋볼"/> <sf = "likes"value = "badminton" "badminton" "badminton". path = "likes"label = "pingpong"value = "pingpong"/> <sf : 오류 경로 = "좋아요"/> <br/> 전화 : <sf : input path = "tel"/> <sf : errors path = "tel"/> <br/> <input type = "value ="add "/>> errors : <brors : <sf/> erras. path = "*"> </sf : errors> <hr/> 좋아요 : <c : foreach item = "$ {user4.likes}"var = "item"> $ {item}, </c : foreach> </sf : form> </body> </html>Form의 ModelAttribute 속성 값은 소문자부터 시작하여 User4 클래스 이름에 해당합니다. 그렇지 않으면 오류가 발생합니다.
9. 페이지 UI 결과 :
추가 버튼을 클릭 한 후 :
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.