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

使用SpringMVC的@Validated注解驗(yàn)證的實(shí)現(xiàn)

 更新時(shí)間:2019年08月14日 11:21:41   作者:J-Jian  
這篇文章主要介紹了使用SpringMVC的@Validated注解驗(yàn)證的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1、SpringMVC驗(yàn)證@Validated的使用

第一步:編寫(xiě)國(guó)際化消息資源文件

編寫(xiě)國(guó)際化消息資源ValidatedMessage.properties文件主要是用來(lái)顯示錯(cuò)誤的消息定制

edit.username.null=用戶名不能為空
edit.password.size=密碼最少{min}位,最長(zhǎng){max}位
......

可以將edit.username.null與edit.password.size看為參數(shù),在message中傳遞,具體請(qǐng)看第二步。

第二步:Bean實(shí)體類(lèi)中加注解

首先介紹關(guān)于驗(yàn)證注解的類(lèi)型種類(lèi)

@Null 限制只能為null
@NotNull 限制必須不為null
@AssertFalse 限制必須為false
@AssertTrue 限制必須為true
@DecimalMax(value) 限制必須為一個(gè)不大于指定值的數(shù)字
@DecimalMin(value) 限制必須為一個(gè)不小于指定值的數(shù)字
@Digits(integer,fraction) 限制必須為一個(gè)小數(shù),且整數(shù)部分的位數(shù)不能超過(guò)integer,小數(shù)部分的位數(shù)不能超過(guò)fraction
@Future 限制必須是一個(gè)將來(lái)的日期
@Max(value) 限制必須為一個(gè)不大于指定值的數(shù)字
@Min(value) 限制必須為一個(gè)不小于指定值的數(shù)字
@Past 驗(yàn)證注解的元素值(日期類(lèi)型)比當(dāng)前時(shí)間早
@Pattern(value) 限制必須符合指定的正則表達(dá)式
@Size(max,min) 限制字符長(zhǎng)度必須在min到max之間
@NotEmpty 驗(yàn)證注解的元素值不為null且不為空(字符串長(zhǎng)度不為0、集合大小不為0)
@NotBlank 驗(yàn)證注解的元素值不為空(不為null、去除首位空格后長(zhǎng)度為0),不同于@NotEmpty,@NotBlank只應(yīng)用于字符串且在比較時(shí)會(huì)去除字符串的空格
@Email 驗(yàn)證注解的元素值是Email,也可以通過(guò)正則表達(dá)式和flag指定自定義的email格式

使用 這些注解很簡(jiǎn)單,只需要在實(shí)體類(lèi)中的變量屬性前面加上該注解即可。

public class User { 
  private String id; 
  @NotEmpty(message = "{edit.username.null}")
  private String username;
  @Size(min=6 ,max= 20 ,message = "{edit.password.size}")
  private String password;
  ......
}

其中{}相當(dāng)于占位符,將min、max參數(shù)傳圖,同時(shí)也將消息文件中定制的錯(cuò)誤信息傳入,當(dāng)然也可以直接不使用國(guó)際化文件,但是推薦使用,方便統(tǒng)一與修改。

public class User { 
  private String id; 
  @NotEmpty(message = "用戶名不能為空")
  private String username;
  @Size(min=6 ,max= 20 ,message = "密碼最少6位,最高20位")
  private String password;
  ......
}

第三步:Controller層的編寫(xiě)

Controller層的使用,很簡(jiǎn)單。需要在相應(yīng)的方法傳入的Bean參數(shù)前面增加注解@Validated,還有增加BindingResult參數(shù)即可,具體請(qǐng)看代碼示例:

@Controller 
public class UserController { 
 
  @RequestMapping("/save") 
  public String save(@Validated User user, BindingResult result) { 
    if(result.hasErrors()) { 
      return "error"; 
    } 
    return "success"; 
  } 
}

第四步:在View層顯示錯(cuò)誤信息

這里就不做介紹了,實(shí)際項(xiàng)目中會(huì)封裝好相應(yīng)的javcscript等方法,只需要調(diào)用就可以返回頁(yè)面提示給用戶錯(cuò)誤信息。

2、@Validated的分組特性

先在記錄之前,介紹一下這樣的場(chǎng)景:在對(duì)用戶的帳號(hào)密碼進(jìn)行編輯保存以及新增是兩種不一樣的情況。

編輯修改->保存:只需要驗(yàn)證username與password是否符合條件即可,不需要驗(yàn)證id(因?yàn)樵跀?shù)據(jù)庫(kù)中id已經(jīng)存在)。

新增->保存:新增需要驗(yàn)證username與password是否符合條件,還要驗(yàn)證id。

這時(shí)候就用到groups分組分情況對(duì)Bean屬性變量進(jìn)行驗(yàn)證,也可以滿足多驗(yàn)證。具體的需要一下兩個(gè)步驟

第一步:創(chuàng)建分組接口類(lèi)

分組接口類(lèi)只是普通的接口類(lèi)并沒(méi)有多大意義,只是用來(lái)標(biāo)識(shí)這個(gè)屬性哪種情況下被驗(yàn)證,這類(lèi)似于java.io.Serializable  

public interface addUser{ 
} 
public interface editUser{
}

第二步:Controller方法參數(shù)中增加xxx.class接口

在對(duì)新增的用戶進(jìn)行ID驗(yàn)證,增加@Validated({addUser.class})接口類(lèi)用來(lái)表示新增的User.getId()需要驗(yàn)證。

@Controller 
public class UserController { 
 
  @RequestMapping("/saveAdd") 
  public String saveAddUser(@Validated({addUser.class}) User user, BindingResult result) { 
    if(result.hasErrors()) { 
      return "error"; 
    } 
    return "success"; 
  }

第三步:Bean中添加groups分組

在User實(shí)體類(lèi)中添加groups分組@NotEmpty(groups={addUser.class})與UserController中@Validated({addUser.class})對(duì)應(yīng),說(shuō)明在執(zhí)行saveAddUser新增用戶的情況下,才對(duì)新增的用戶id進(jìn)行驗(yàn)證。

public class User {  
  //在分組addUser時(shí),驗(yàn)證id不能為空,其他情況下不做驗(yàn)證
  @NotEmpty(groups={addUser.class})
  private String id;
  @NotEmpty(message = "用戶名不能為空")
  private String username;
  @Size(min=6 ,max= 20 ,message = "密碼最少6位,最高20位")
  private String password;
  ......
}

以上三步就可以簡(jiǎn)單地完成分組驗(yàn)證,但是對(duì)分組驗(yàn)證補(bǔ)充一下三點(diǎn):

第一是:不分配groups分組時(shí),默認(rèn)每次都需要驗(yàn)證。

第二是:通過(guò)groups分組可以對(duì)同一個(gè)變量進(jìn)行多個(gè)驗(yàn)證,如下代碼

//對(duì)用戶名進(jìn)行兩次不同情況的驗(yàn)證。
@NotEmpty(groups={First.class})
@Size(min=1,max=10,groups={Second.class})
public String username;

第三是:默認(rèn)的情況下,不同的分組約束驗(yàn)證是無(wú)序的,但是在有些情況下驗(yàn)證的相互約束很重要(比如前一個(gè)組驗(yàn)證失敗,后面的將不再驗(yàn)證等情況),所以groups分組的驗(yàn)證也有前后驗(yàn)證順序。使用@GroupSequence注解進(jìn)行排序。

/*
 * 分組順序接口類(lèi)
 */
import javax.validation.GroupSequence;
//分組序列先Frist再Second
@GroupSequence({First.class,Second.class})
public interface Group{
}
 
@Controller 
public class UserController { 
 
  @RequestMapping("/saveAdd") 
  public String saveAddUser(@Validated({Group.class}) User user, BindingResult result) { 
    if(result.hasErrors()) { 
      return "error"; 
    } 
    return "success"; 
  }

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

相關(guān)文章

  • java中1+1d/5和1+1/5的區(qū)別說(shuō)明

    java中1+1d/5和1+1/5的區(qū)別說(shuō)明

    這篇文章主要介紹了java中1+1d/5和1+1/5的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • java用接口、多態(tài)、繼承、類(lèi)計(jì)算三角形和矩形周長(zhǎng)及面積的方法

    java用接口、多態(tài)、繼承、類(lèi)計(jì)算三角形和矩形周長(zhǎng)及面積的方法

    這篇文章主要介紹了java用接口、多態(tài)、繼承、類(lèi)計(jì)算三角形和矩形周長(zhǎng)及面積的方法,涉及java面向?qū)ο笾蓄?lèi)、接口、多態(tài)等的使用技巧,需要的朋友可以參考下
    2015-05-05
  • Java異常處理實(shí)例詳解

    Java異常處理實(shí)例詳解

    這篇文章主要介紹了Java異常處理實(shí)例詳解,列舉了實(shí)際例子講解的很清晰,有感興趣的同學(xué)可以學(xué)習(xí)下
    2021-03-03
  • Java的IO模型、Netty原理解析

    Java的IO模型、Netty原理解析

    Java的I/O是以流的方式進(jìn)行數(shù)據(jù)輸入輸出的,Java的類(lèi)庫(kù)涉及很多領(lǐng)域的IO內(nèi)容:標(biāo)準(zhǔn)的輸入輸出,文件的操作、網(wǎng)絡(luò)上的數(shù)據(jù)傳輸流、字符串流、對(duì)象流等,這篇文章主要介紹了Java的IO模型、Netty原理詳解,需要的朋友可以參考下
    2025-03-03
  • Java后端產(chǎn)生驗(yàn)證碼后臺(tái)驗(yàn)證功能的實(shí)現(xiàn)代碼

    Java后端產(chǎn)生驗(yàn)證碼后臺(tái)驗(yàn)證功能的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Java后臺(tái)產(chǎn)生驗(yàn)證碼后臺(tái)驗(yàn)證功能,本文文字結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • 對(duì)ArrayList和LinkedList底層實(shí)現(xiàn)原理詳解

    對(duì)ArrayList和LinkedList底層實(shí)現(xiàn)原理詳解

    今天小編就為大家分享一篇對(duì)ArrayList和LinkedList底層實(shí)現(xiàn)原理詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • java volatile關(guān)鍵字使用方法及注意事項(xiàng)

    java volatile關(guān)鍵字使用方法及注意事項(xiàng)

    這篇文章主要介紹了java volatile關(guān)鍵字使用方法及注意事項(xiàng)的相關(guān)資料,當(dāng)一個(gè)變量被聲明為 volatile 后,java 內(nèi)存模型確保所有使用該變量的線程能看到相同的、一致的值。,需要的朋友可以參考下
    2017-07-07
  • Java Spring Boot 集成Zookeeper

    Java Spring Boot 集成Zookeeper

    這篇文章主要介紹了Java Spring Boot 集成Zookeeper,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • Java前后端任意參數(shù)類(lèi)型轉(zhuǎn)換方式(Date、LocalDateTime、BigDecimal)

    Java前后端任意參數(shù)類(lèi)型轉(zhuǎn)換方式(Date、LocalDateTime、BigDecimal)

    這篇文章主要介紹了Java前后端任意參數(shù)類(lèi)型轉(zhuǎn)換方式(Date、LocalDateTime、BigDecimal),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java使用ObjectMapper的簡(jiǎn)單示例

    Java使用ObjectMapper的簡(jiǎn)單示例

    這篇文章主要介紹了Java使用ObjectMapper的簡(jiǎn)單示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評(píng)論

呼和浩特市| 柘荣县| 措勤县| 古交市| 安阳县| 乌兰浩特市| 武夷山市| 连江县| 白水县| 准格尔旗| 黄陵县| 镇宁| 慈利县| 嘉义县| 忻州市| 扎赉特旗| 永胜县| 东莞市| 青川县| 洛南县| 察隅县| 平果县| 蓝山县| 鹤峰县| 汤原县| 岫岩| 喜德县| 岑溪市| 横峰县| 新蔡县| 娄烦县| 武夷山市| 阳原县| 新田县| 布尔津县| 纳雍县| 吕梁市| 德保县| 嵩明县| 集安市| 南昌市|