国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Java > 正文

Spring請(qǐng)求參數(shù)校驗(yàn)功能實(shí)例演示

2024-07-14 08:40:43
字體:
供稿:網(wǎng)友

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

依賴引用

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

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

JSR提供的校驗(yàn)注解:     

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

Hibernate Validator提供的校驗(yàn)注解: 

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

實(shí)例演示

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

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

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

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

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

訪問測(cè)試:

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

{ "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": "郵箱格式錯(cuò)誤",   "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,長(zhǎng)度必須大于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": "密碼長(zhǎng)度必須在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"}

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

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

再次請(qǐng)求,請(qǐng)求格式如下

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

響應(yīng)如下

參數(shù)異常

在控制臺(tái)打印的信息如下:

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

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

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

請(qǐng)求參數(shù)如下:

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

響應(yīng)如下:

ok

控制臺(tái)什么也沒輸出。

總結(jié)

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


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JAVA教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 博白县| 巩留县| 巴中市| 越西县| 龙泉市| 扶沟县| 新建县| 南涧| 沽源县| 望谟县| 故城县| 凤山县| 海城市| 抚顺市| 兴和县| 怀安县| 大关县| 揭阳市| 襄樊市| 南康市| 临清市| 天祝| 梁河县| 庄河市| 烟台市| 周至县| 郓城县| 蓬莱市| 红安县| 日土县| 新乡市| 绥滨县| 城市| 措勤县| 五大连池市| 勃利县| 中山市| 高陵县| 富宁县| 荥经县| 泽普县|