SpringMVC 는@Valid 주 해 를 사용 하여 데이터 검증 을 하 는 방법

8834 단어 springvalid
우 리 는 Form 폼 을 제출 할 때 전단 에서 만 데이터 검 사 를 하 는 것 이 안전 하지 않 기 때문에 가끔 은 백 엔 드 에서 똑 같이 데이터 검 사 를 해 야 합 니 다.다행히 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)에 바짝 붙 어야 합 니 다.그렇지 않 으 면 효력 이 발생 하지 않 습 니 다.
또한 주의해 야 할 것 은 여기 있 는 검사 가 어떤 요청 인지 검사 해 야 하 는 요청 이 있 으 면 그 요청 에 쓰 는 것 입 니 다.전역 검증 을 설정 하려 면에 vaidator 를 설정 할 수 있 습 니 다.쓰 는 방법 은 다음 과 같다.

<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"/> 
메모:탭 은 SpringMVC 에서 제공 하기 때문에 이 탭 라 이브 러 리 를 도입 해 야 합 니 다.

<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

효 과 는 다음 과 같 습 니 다:

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기