中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringMVC使用@Valid注解進行數據驗證的方法

發布時間:2020-09-25 23:12:47 來源:腳本之家 閱讀:194 作者:木葉之榮 欄目:編程語言

我們在做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接口。在這個類里我們需要定義它支持校驗的JavaBean,實現validate方法,用來進行相關的校驗。具體的實現類如下:

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

結果:

SpringMVC使用@Valid注解進行數據驗證的方法

請求:http://localhost:8081/testPersonalValidtor.do?name=張三&address=三元橋

結果:

SpringMVC使用@Valid注解進行數據驗證的方法

具體Controller類代碼如下:

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要緊挨著JavaBean(即PersonScope),要不然不會生效的。

另外需要注意的是:這里的校驗是哪個請求需要校驗,就寫在哪個請求上。如果需要配置全局的校驗的話,可以在<mvc:annotation-driven/>中配置validator。寫法如下:

<mvc:annotation-driven validator="personalValidtor"> 

<bean id="personalValidtor" class="com.zkn.learnspringmvc.validtor.PersonalValidtor"/> 

使用<form:errors />標簽

上面的錯誤信息的展示是我們自己來展示的錯誤信息,但是SpringMVC還給我們提供了一個<form:errors />標簽來展示錯誤信息。例子如下:

@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"/> 

注意:<form:errors />標簽是SpringMVC提供的,所以我們得引入這個標簽庫

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

效果如下:

SpringMVC使用@Valid注解進行數據驗證的方法

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

逊克县| 襄樊市| 疏附县| 如东县| 通州市| 洛宁县| 宜兰县| 邯郸市| 邮箱| 黄陵县| 云阳县| 洪湖市| 乐清市| 广宗县| 深圳市| 东乌| 公安县| 九龙城区| 香格里拉县| 耒阳市| 兴国县| 通海县| 六枝特区| 红河县| 射洪县| 剑阁县| 江北区| 瑞昌市| 阿荣旗| 子洲县| 潢川县| 全椒县| 喀喇| 岳阳县| 太保市| 莲花县| 区。| 卢湾区| 得荣县| 安泽县| 南漳县|