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

Spring請求參數(shù)校驗功能實例演示

 更新時間:2018年05月08日 11:22:14   作者:趙彥軍  
這篇文章主要介紹了Spring請求參數(shù)校驗功能實例演示,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧

SpringMVC支持的數(shù)據(jù)校驗是JSR303的標(biāo)準(zhǔn),通過在bean的屬性上打上@NotNull、@Max等進(jìn)行驗證。JSR303提供有很多annotation接口,而SpringMVC對于這些驗證是使用hibernate的實現(xiàn),所以我們需要添加hibernate的一個validator包:

依賴引用

compile 'javax.validation:validation-api:2.0.0.Final'
compile 'org.hibernate:hibernate-validator:6.0.0.Final'

框架已經(jīng)提供校驗如下:

JSR提供的校驗注解:     

@Null   被注釋的元素必須為 null   
@NotNull    被注釋的元素必須不為 null,不能為 null , 可以為 ""   
@AssertTrue     被注釋的元素必須為 true   
@AssertFalse    被注釋的元素必須為 false   
@Min(value)     被注釋的元素必須是一個數(shù)字,其值必須大于等于指定的最小值   
@Max(value)     被注釋的元素必須是一個數(shù)字,其值必須小于等于指定的最大值   
@DecimalMin(value)  被注釋的元素必須是一個數(shù)字,其值必須大于等于指定的最小值   
@DecimalMax(value)  被注釋的元素必須是一個數(shù)字,其值必須小于等于指定的最大值   
@Size(max=, min=)   驗證對象(Array,Collection,Map,String)長度是否在給定的范圍之內(nèi)   
@Digits (integer, fraction)     被注釋的元素必須是一個數(shù)字,其值必須在可接受的范圍內(nèi)   
@Past   被注釋的元素必須是一個過去的日期   
@Future     被注釋的元素必須是一個將來的日期   
@Pattern(regex=,flag=)  被注釋的元素必須符合指定的正則表達(dá)式   

Hibernate Validator提供的校驗注解: 

@NotBlank(message =)   只能作用在String上,不能為null,而且調(diào)用trim()后,長度必須大于0   
@Email  被注釋的元素必須是電子郵箱地址   
@Length(min=,max=)  被注釋的字符串的大小必須在指定的范圍內(nèi)   
@NotEmpty   被注釋的字符串的必須非空,不能為 null、"",可以為 " "   
@Range(min=,max=,message=)  被注釋的元素必須在合適的范圍內(nèi)

實例演示

創(chuàng)建需要被校驗的實體類:

package com.yiba.wifi.news.bean.model;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.*;
public class User {
  @NotBlank(message = "用戶名不能為null,長度必須大于0")
  String name;  //用戶名
  @Min(value = 1, message = "最小年齡為1歲")
  @Max(value = 120, message = "最大年齡為120歲")
  Integer age; //年齡
  @Email(message = "郵箱格式錯誤")
  @NotBlank(message = "郵箱格式錯誤")  
  String email; //郵箱
  @Length(min = 6, max = 12, message = "密碼長度必須在6位到12位之間")
  String pwd;//密碼
  //get、set.........
}

注意在校驗郵箱的時候,當(dāng) email 為 "", 或者 null 的時候,會通過 @Email驗證,所以郵箱校驗需要 @Email和 @NotBlank 共同起作用。

controller 接口設(shè)計,在參數(shù)接受的地方添加 @Validated 關(guān)鍵字

 /**
   * 登錄接口
   * @return
   */
  @PostMapping("login")
  public String login(@Validated @RequestBody User user) {
    return "ok";
  }

訪問測試:

當(dāng)訪問數(shù)據(jù)是如下格式的時候

{
 "name": "",
 "age": 0,
 "email": "",
 "pwd": ""
}

響應(yīng)為:

{
 "timestamp": 1524640724522,
 "status": 400,
 "error": "Bad Request",
 "exception": "org.springframework.web.bind.MethodArgumentNotValidException",
 "errors": [
  {
   "codes": [
    "NotBlank.user.email",
    "NotBlank.email",
    "NotBlank.java.lang.String",
    "NotBlank"
   ],
   "arguments": [
    {
     "codes": [
      "user.email",
      "email"
     ],
     "arguments": null,
     "defaultMessage": "email",
     "code": "email"
    }
   ],
   "defaultMessage": "郵箱格式錯誤",
   "objectName": "user",
   "field": "email",
   "rejectedValue": "",
   "bindingFailure": false,
   "code": "NotBlank"
  },
  {
   "codes": [
    "NotBlank.user.name",
    "NotBlank.name",
    "NotBlank.java.lang.String",
    "NotBlank"
   ],
   "arguments": [
    {
     "codes": [
      "user.name",
      "name"
     ],
     "arguments": null,
     "defaultMessage": "name",
     "code": "name"
    }
   ],
   "defaultMessage": "用戶名不能為null,長度必須大于0",
   "objectName": "user",
   "field": "name",
   "rejectedValue": "",
   "bindingFailure": false,
   "code": "NotBlank"
  },
  {
   "codes": [
    "Length.user.pwd",
    "Length.pwd",
    "Length.java.lang.String",
    "Length"
   ],
   "arguments": [
    {
     "codes": [
      "user.pwd",
      "pwd"
     ],
     "arguments": null,
     "defaultMessage": "pwd",
     "code": "pwd"
    },
    12,
    6
   ],
   "defaultMessage": "密碼長度必須在6位到12位之間",
   "objectName": "user",
   "field": "pwd",
   "rejectedValue": "",
   "bindingFailure": false,
   "code": "Length"
  },
  {
   "codes": [
    "Min.user.age",
    "Min.age",
    "Min.java.lang.Integer",
    "Min"
   ],
   "arguments": [
    {
     "codes": [
      "user.age",
      "age"
     ],
     "arguments": null,
     "defaultMessage": "age",
     "code": "age"
    },
    1
   ],
   "defaultMessage": "最小年齡為1歲",
   "objectName": "user",
   "field": "age",
   "rejectedValue": 0,
   "bindingFailure": false,
   "code": "Min"
  }
 ],
 "message": "Validation failed for object='user'. Error count: 4",
 "path": "/yiba/sms/login"
}

可以看到本地請求,4個字段校驗都沒通過,那么我有沒有辦法獲取異常信息呢,答案是有的,需要我們修改 controller 接口。

 /**
   * 登錄接口
   *
   * @return
   */
  @PostMapping("login")
  public String login(@Validated @RequestBody User user, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
      //有校驗沒通過
      List<ObjectError> errorList = bindingResult.getAllErrors();
      for (ObjectError error : errorList) {
        System.out.println(error.getDefaultMessage()); //輸出具體的錯誤信息
      }
      return "參數(shù)異常";
    }
    return "ok";
  }

再次請求,請求格式如下

{
 "name": "",
 "age": 0,
 "email": "",
 "pwd": ""
}

響應(yīng)如下

參數(shù)異常

在控制臺打印的信息如下:

用戶名不能為null,長度必須大于0
密碼長度必須在6位到12位之間
最小年齡為1歲
郵箱格式錯誤

可以看到我們已經(jīng)正常的獲取到了校驗信息了。

下面我們來做一次參照正確的訪問:

請求參數(shù)如下:

{
 "name": "zhaoyanjun",
 "age": 1,
 "email": "362299465@qq.com",
 "pwd": "123456"
}

響應(yīng)如下:

ok

控制臺什么也沒輸出。

總結(jié)

以上所述是小編給大家介紹的Spring請求參數(shù)校驗功能實例演示,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Spring?Boot?集成JWT實現(xiàn)前后端認(rèn)證的示例代碼

    Spring?Boot?集成JWT實現(xiàn)前后端認(rèn)證的示例代碼

    小程序、H5應(yīng)用的快速發(fā)展,使得前后端分離已經(jīng)成為了趨勢,本文主要介紹了Spring?Boot?集成JWT實現(xiàn)前后端認(rèn)證,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • JDK版本管理工具jEnv解決不同jdk版本項目

    JDK版本管理工具jEnv解決不同jdk版本項目

    本文主要介紹了JDK版本管理工具jEnv解決不同jdk版本項目,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 關(guān)于Java企業(yè)級項目開發(fā)思想

    關(guān)于Java企業(yè)級項目開發(fā)思想

    Java企業(yè)級項目開發(fā)思想。偶遇,讀有所得,遂分享給大家,本文不涉及案例,只談思想和理念,需要的朋友可以參考。
    2017-09-09
  • Java使用Collections.sort()排序的示例詳解

    Java使用Collections.sort()排序的示例詳解

    這篇文章主要介紹了Java使用Collections.sort()排序的示例詳解,Collections.sort(list, new PriceComparator());的第二個參數(shù)返回一個int型的值,就相當(dāng)于一個標(biāo)志,告訴sort方法按什么順序來對list進(jìn)行排序。對此感興趣的可以了解一下
    2020-07-07
  • Java探索之string字符串的應(yīng)用代碼示例

    Java探索之string字符串的應(yīng)用代碼示例

    這篇文章主要介紹了Java探索之string字符串的應(yīng)用代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • 關(guān)于Scanner對象的輸入結(jié)束標(biāo)記問題

    關(guān)于Scanner對象的輸入結(jié)束標(biāo)記問題

    這篇文章主要介紹了關(guān)于Scanner對象的輸入結(jié)束標(biāo)記問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java控制語句之if、switch語句

    Java控制語句之if、switch語句

    這篇文章主要介紹了Java控制語句之if、switch語句的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • 使用 Redis 緩存實現(xiàn)點贊和取消點贊的示例代碼

    使用 Redis 緩存實現(xiàn)點贊和取消點贊的示例代碼

    這篇文章主要介紹了使用 Redis 緩存實現(xiàn)點贊和取消點贊的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java文件管理操作的知識點整理

    Java文件管理操作的知識點整理

    這篇文章主要為大家詳細(xì)介紹了Java中文件管理操作的一些知識點和實現(xiàn)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2022-09-09
  • IDEA如何搭建Struts2項目

    IDEA如何搭建Struts2項目

    這篇文章主要介紹了IDEA如何搭建Struts2項目,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-02-02

最新評論

桦南县| 电白县| 繁峙县| 和平县| 曲周县| 绩溪县| 紫金县| 盐边县| 波密县| 临汾市| 耿马| 长治县| 陵川县| 温宿县| 平凉市| 兴海县| 甘孜县| 田东县| 鱼台县| 应城市| 集安市| 巧家县| 芦山县| 徐州市| 钟山县| 娄烦县| 许昌市| 肥乡县| 宜阳县| 永宁县| 商水县| 八宿县| 台州市| 南投县| 高要市| 景泰县| 德化县| 凤山县| 青河县| 商都县| 南召县|