日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Spring请求参数校验

發(fā)布時(shí)間:2024/9/30 javascript 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring请求参数校验 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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è)將來(lái)的日期 @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)信息了。

下面我們來(lái)做一次參照正確的訪問:
請(qǐng)求參數(shù)如下:

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

響應(yīng)如下:

ok

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

到這里校驗(yàn)已經(jīng)講解完成了。

個(gè)人微信號(hào):zhaoyanjun125 , 歡迎關(guān)注

總結(jié)

以上是生活随笔為你收集整理的Spring请求参数校验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。