最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringMVC使用@Valid注解進(jìn)行數(shù)據(jù)驗(yàn)證的方法

 更新時(shí)間:2017年02月20日 14:42:46   作者:木葉之榮  
本篇文章主要介紹了SpringMVC使用@Valid注解進(jìn)行數(shù)據(jù)驗(yàn)證的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

我們?cè)谧鯢orm表單提交的時(shí)候,只在前端做數(shù)據(jù)校驗(yàn)是不夠安全的,所以有時(shí)候我們需要在后端同樣做數(shù)據(jù)的校驗(yàn)。好在SpringMVC在后臺(tái)驗(yàn)證給我們提供了一個(gè)比較好的支持。那就是使用Valid接口的實(shí)現(xiàn)類做數(shù)據(jù)校驗(yàn)。在這之前我們先做一下準(zhǔn)備的工作。

添加相關(guān)的Maven依賴

我們先把需要的jar包添加進(jìn)來(lái)。

<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> 

實(shí)現(xiàn)Validator接口

接下來(lái)的第一 步我們需要寫一個(gè)類來(lái)實(shí)現(xiàn)Validator接口。在這個(gè)類里我們需要定義它支持校驗(yàn)的JavaBean,實(shí)現(xiàn)validate方法,用來(lái)進(jìn)行相關(guān)的校驗(yàn)。具體的實(shí)現(xiàn)類如下:

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); 
  } 
 
  /** 
   * 實(shí)現(xiàn)Validator中的validate接口 
   * @param obj 
   * @param errors 
   */ 
  @Override 
  public void validate(Object obj, Errors errors) { 
    //把校驗(yàn)信息注冊(cè)到Error的實(shí)現(xiàn)類里 
    ValidationUtils.rejectIfEmpty(errors,"name",null,"姓名不能為空!"); 
    PersonScope personScope = (PersonScope) obj; 
    if(StringUtils.isEmpty(personScope.getAddress())){ 
      errors.rejectValue("address",null,"家庭地址不能為空!!!!"); 
    } 
  } 
} 

使用Validtor的校驗(yàn)實(shí)現(xiàn)類

我們需要在Controller的類里使用剛才寫的Validtor的校驗(yàn)實(shí)現(xiàn)類來(lái)進(jìn)行表單數(shù)據(jù)的校驗(yàn)。我們需要在Controller里用@InitBinder注解把剛才的校驗(yàn)類綁定到WebDataBinder類里。寫法如下:

//綁定PersonalValidator 
@InitBinder 
public void initBinder(WebDataBinder webDataBinder){ 
  webDataBinder.addValidators(new PersonalValidtor()); 
} 

接下來(lái)我們需要在@RequestMapping這個(gè)注解所在的方法上使用@Valid注解進(jìn)行數(shù)據(jù)的校驗(yàn)。

@RequestMapping(value = "testPersonalValidtor.do") 
@ResponseBody 
//直接返回對(duì)象 
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; 
  } 
} 

接下來(lái)我們來(lái)看一下效果:

請(qǐng)求:http://localhost:8081/testPersonalValidtor.do

結(jié)果:

請(qǐng)求:http://localhost:8081/testPersonalValidtor.do?name=張三&address=三元橋

結(jié)果:

具體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; 
 
/** 
 * 用來(lái)測(cè)試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 
  //直接返回對(duì)象 
  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實(shí)體類:

package com.zkn.learnspringmvc.scope; 
 
import java.io.Serializable; 
 
/** 
 * Person對(duì)象 
 * @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),要不然不會(huì)生效的。

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

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

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

使用<form:errors />標(biāo)簽

上面的錯(cuò)誤信息的展示是我們自己來(lái)展示的錯(cuò)誤信息,但是SpringMVC還給我們提供了一個(gè)<form:errors />標(biāo)簽來(lái)展示錯(cuò)誤信息。例子如下:

@RequestMapping(value = "testPersonalValidtor02.do") 
public Object testPersonalValidtor01(@Valid PersonScope personScope, BindingResult bindingResult){ 
  if(bindingResult.hasErrors()){ 
    return "error"; 
  }else{ 
    return "home"; 
  } 
} 

jsp頁(yè)面內(nèi)容如下:

<%@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 />標(biāo)簽是SpringMVC提供的,所以我們得引入這個(gè)標(biāo)簽庫(kù)

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

效果如下:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java求余%操作引發(fā)的一連串故事

    Java求余%操作引發(fā)的一連串故事

    取模運(yùn)算與取余運(yùn)算兩個(gè)概念有重疊的部分但又不完全一致。主要的區(qū)別在于對(duì)負(fù)整數(shù)進(jìn)行除法運(yùn)算時(shí)操作不同。本文重點(diǎn)給大家介紹Java求余%操作引發(fā)的一連串故事,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • Java父線程(或是主線程)等待所有子線程退出的實(shí)例

    Java父線程(或是主線程)等待所有子線程退出的實(shí)例

    下面小編就為大家分享一篇Java父線程(或是主線程)等待所有子線程退出的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2017-11-11
  • Java進(jìn)階知識(shí)之反射的概念與獲取方法

    Java進(jìn)階知識(shí)之反射的概念與獲取方法

    這篇文章主要給大家介紹了關(guān)于Java進(jìn)階知識(shí)之反射的概念與獲取方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • java實(shí)現(xiàn)學(xué)生選課系統(tǒng)

    java實(shí)現(xiàn)學(xué)生選課系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)學(xué)生選課系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Java判斷閏年的2種方法示例

    Java判斷閏年的2種方法示例

    這篇文章主要給大家介紹了關(guān)于Java判斷閏年的2種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java并發(fā)編程系列之LockSupport的用法

    Java并發(fā)編程系列之LockSupport的用法

    這篇文章主要為大家介紹了Java LockSupport的用法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助,希望能夠給你帶來(lái)幫助
    2021-11-11
  • 詳解SpringCloud使用Consul做注冊(cè)中心

    詳解SpringCloud使用Consul做注冊(cè)中心

    這篇文章主要介紹了SpringCloud使用Consul做注冊(cè)中心,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java面試題之HashSet的實(shí)現(xiàn)原理

    Java面試題之HashSet的實(shí)現(xiàn)原理

    這篇文章主要介紹了Java面試題之HashSet的實(shí)現(xiàn)原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 詳解MyBatis模糊查詢LIKE的三種方式

    詳解MyBatis模糊查詢LIKE的三種方式

    模糊查詢也是數(shù)據(jù)庫(kù)SQL中使用頻率很高的SQL語(yǔ)句,這篇文章主要介紹了詳解MyBatis模糊查詢LIKE的三種方式,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-10-10
  • SpringBoot項(xiàng)目從搭建到發(fā)布一條龍

    SpringBoot項(xiàng)目從搭建到發(fā)布一條龍

    這篇文章主要介紹了SpringBoot項(xiàng)目從搭建到發(fā)布一條龍,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02

最新評(píng)論

江津市| 三亚市| 襄汾县| 合作市| 无棣县| 绥宁县| 仁寿县| 年辖:市辖区| 资源县| 沽源县| 广南县| 桂林市| 兴国县| 长子县| 马尔康县| 彭山县| 漠河县| 温泉县| 资溪县| 布拖县| 赞皇县| 昌吉市| 晋江市| 专栏| 铜川市| 和政县| 兴化市| 广河县| 鸡东县| 建始县| 鄢陵县| 梨树县| 西华县| 新宁县| 古蔺县| 改则县| 鄂尔多斯市| 安远县| 仁化县| 临沧市| 通河县|