SpringMVC 는@Valid 주 해 를 사용 하여 데이터 검증 을 하 는 방법
관련 Maven 의존 추가
우 리 는 먼저 필요 한 jar 가방 을 추가 합 니 다.
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.apache.bval</groupId>
<artifactId>bval-jsr303</artifactId>
<version>0.5</version>
</dependency>
Validator 인터페이스 구현다음 첫 번 째 단 계 는 Validator 인 터 페 이 스 를 실현 하기 위해 종 류 를 써 야 합 니 다.이 클래스 에서 검 사 를 지원 하 는 자바 빈 을 정의 하고 vaidate 방법 을 실현 하여 관련 검 사 를 진행 해 야 합 니 다.구체 적 인 실현 유형 은 다음 과 같다.
package com.zkn.learnspringmvc.validtor;
import com.zkn.learnspringmvc.scope.PersonScope;
import org.springframework.util.StringUtils;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
/**
* Created by wb-zhangkenan on 2016/9/2.
*/
public class PersonalValidtor implements Validator{
/**
* JavaBean
* @param aClass
* @return
*/
@Override
public boolean supports(Class<?> aClass) {
return PersonScope.class.equals(aClass);
}
/**
* Validator validate
* @param obj
* @param errors
*/
@Override
public void validate(Object obj, Errors errors) {
// Error
ValidationUtils.rejectIfEmpty(errors,"name",null," !");
PersonScope personScope = (PersonScope) obj;
if(StringUtils.isEmpty(personScope.getAddress())){
errors.rejectValue("address",null," !!!!");
}
}
}
Validtor 의 검증 실현 클래스 사용 하기우 리 는 Controller 클래스 에서 방금 쓴 Validtor 의 검증 실현 클래스 를 사용 하여 폼 데이터 의 검증 을 해 야 합 니 다.Controller 에서@InitBinder 주석 으로 방금 검사 클래스 를 WebDataBinder 클래스 에 연결 해 야 합 니 다.쓰 는 방법 은 다음 과 같다.
// PersonalValidator
@InitBinder
public void initBinder(WebDataBinder webDataBinder){
webDataBinder.addValidators(new PersonalValidtor());
}
다음은@RequestMapping 이라는 주해 가 있 는 방법 에서@Valid 주 해 를 사용 하여 데이터 검증 을 해 야 합 니 다.
@RequestMapping(value = "testPersonalValidtor.do")
@ResponseBody
//
public Object testPersonalValidtor(@Valid PersonScope personScope, BindingResult bindingResult){
if(bindingResult.hasErrors()){
StringBuffer sb = new StringBuffer();
for(ObjectError objectError : bindingResult.getAllErrors()){
sb.append(((FieldError)objectError).getField() +" : ").append(objectError.getDefaultMessage());
}
return sb.toString();
}else{
return personScope;
}
}
다음은 효 과 를 살 펴 보 겠 습 니 다.요청:http://localhost:8081/testPersonalValidtor.do
결과:
요청:http://localhost:8081/testPersonalValidtor.do?name=장삼&address=삼원 교
결과:
구체 적 인 컨트롤 러 클래스 코드 는 다음 과 같 습 니 다.
package com.zkn.learnspringmvc.news.controller;
import com.alibaba.fastjson.JSON;
import com.zkn.learnspringmvc.scope.PersonScope;
import com.zkn.learnspringmvc.validtor.PersonalValidtor;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
/**
* PersonalValidator
* Created by wb-zhangkenan on 2016/9/2.
*/
@Controller
public class TestPersonlalValidtorController {
// PersonalValidator
@InitBinder
public void initBinder(WebDataBinder webDataBinder){
webDataBinder.addValidators(new PersonalValidtor());
}
@RequestMapping(value = "testPersonalValidtor.do")
@ResponseBody
//
public Object testPersonalValidtor(@Valid PersonScope personScope, BindingResult bindingResult){
if(bindingResult.hasErrors()){
StringBuffer sb = new StringBuffer();
for(ObjectError objectError : bindingResult.getAllErrors()){
sb.append(((FieldError)objectError).getField() +" : ").append(objectError.getDefaultMessage());
}
return sb.toString();
}else{
return personScope;
}
}
}
PersonScope 실체 클래스:
package com.zkn.learnspringmvc.scope;
import java.io.Serializable;
/**
* Person
* @author zkn
*
*/
public class PersonScope implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
*
*/
private String name;
/**
*
*/
private Integer age;
/**
*
*/
private String address;
private StudentScope studentScope;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "PersonDomain [name=" + name + ", age=" + age + "]";
}
public StudentScope getStudentScope() {
return studentScope;
}
public void setStudentScope(StudentScope studentScope) {
this.studentScope = studentScope;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
여기 서 주의해 야 할 것 은@Valid 는 자바 빈(즉 PersonScope)에 바짝 붙 어야 합 니 다.그렇지 않 으 면 효력 이 발생 하지 않 습 니 다.또한 주의해 야 할 것 은 여기 있 는 검사 가 어떤 요청 인지 검사 해 야 하 는 요청 이 있 으 면 그 요청 에 쓰 는 것 입 니 다.전역 검증 을 설정 하려 면
<mvc:annotation-driven validator="personalValidtor">
<bean id="personalValidtor" class="com.zkn.learnspringmvc.validtor.PersonalValidtor"/>
위의 잘못된 정 보 를 보 여 주 는 것 은 우리 가 보 여 주 는 잘못된 정보 입 니 다.그러나 SpringMVC 는 우리 에 게 잘못된 정 보 를 보 여 주 는
@RequestMapping(value = "testPersonalValidtor02.do")
public Object testPersonalValidtor01(@Valid PersonScope personScope, BindingResult bindingResult){
if(bindingResult.hasErrors()){
return "error";
}else{
return "home";
}
}
jsp 페이지 내용 은 다음 과 같 습 니 다.
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@page pageEncoding="utf-8" contentType="text/html;utf-8"%>
<form:errors path="personScope.name"/>
메모:
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
효 과 는 다음 과 같 습 니 다:이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.