SpringBoot整合Hibernate Validator實(shí)現(xiàn)參數(shù)驗(yàn)證功能
在前后端分離的開(kāi)發(fā)模式中,后端對(duì)前端傳入的參數(shù)的校驗(yàn)成了必不可少的一個(gè)環(huán)節(jié)。但是在多參數(shù)的情況下,在controller層加上參數(shù)驗(yàn)證,會(huì)顯得特別臃腫,并且會(huì)有許多的重復(fù)代碼。這里可以引用Hibernate Validator來(lái)解決這個(gè)問(wèn)題,直接在實(shí)體類進(jìn)行參數(shù)校驗(yàn),驗(yàn)證失敗直接返回錯(cuò)誤信息給前端,減少controller層的代碼量。
一、xml引入Hibernate Validator
<!-- 驗(yàn)證器 --> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.1.5.Final</version> </dependency>
二、通過(guò)注解在實(shí)體類進(jìn)行參數(shù)校驗(yàn)
@Data
public class UserModel {
@NotNull(message = "用戶名稱不能為空!")
private String userName;
@NotNull(message = "age不能為null!")
@Range(min = 1, max = 888, message = "范圍為1至888")
private Integer age;
/**
* 日期格式化轉(zhuǎn)換
*/
@NotNull(message = "日期不能為null!")
private Date date;
}
這里用到的參數(shù)校驗(yàn)的注解有@NotNull和@Range,message是到時(shí)候我們返回給前端的信息,注解的具體意思如下:
- @Null 被注釋的元素必須為null
- @NotNull 被注釋的元素不能為null
- @AssertTrue 被注釋的元素必須為true
- @AssertFalse 被注釋的元素必須為false
- @Min(value) 被注釋的元素必須是一個(gè)數(shù)字,其值必須大于等于指定的最小值
- @Max(value) 被注釋的元素必須是一個(gè)數(shù)字,其值必須小于等于指定的最大值
- @DecimalMin(value) 被注釋的元素必須是一個(gè)數(shù)字,其值必須大于等于指定的最小值
- @DecimalMax(value) 被注釋的元素必須是一個(gè)數(shù)字,其值必須小于等于指定的最大值
- @Size(max,min) 被注釋的元素的大小必須在指定的范圍內(nèi)。
- @Digits(integer,fraction) 被注釋的元素必須是一個(gè)數(shù)字,其值必須在可接受的范圍內(nèi)
- @Past 被注釋的元素必須是一個(gè)過(guò)去的日期
- @Future 被注釋的元素必須是一個(gè)將來(lái)的日期
- @Pattern(value) 被注釋的元素必須符合指定的正則表達(dá)式。
- @Email 被注釋的元素必須是電子郵件地址
- @Length 被注釋的字符串的大小必須在指定的范圍內(nèi)
- @NotEmpty 被注釋的字符串必須非空
- @Range 被注釋的元素必須在合適的范圍內(nèi)
三、controller層的方法加上@Valid注解
@PostMapping("/testPost")public Object testPost(@RequestBody @Valid UserModel userModel, BindingResult result){
if(result.hasErrors()){ for(ObjectError error:result.getAllErrors()){
return error.getDefaultMessage();
}
}
return userModel;
}
controller層這里只需要在實(shí)體類的前面加上@Valid注解,這個(gè)注解可以實(shí)現(xiàn)數(shù)據(jù)的驗(yàn)證。這里BindingResult是存儲(chǔ)了校驗(yàn)時(shí)的錯(cuò)誤信息,驗(yàn)證有誤時(shí)將錯(cuò)誤信息返回給前端。這里不使用BindingResult的時(shí)候,控制臺(tái)會(huì)報(bào)MethodArgumentNotValidException,這里可以通過(guò)自定義異常類來(lái)捕捉它,然后去掉BindingResult,以及難看的if判斷。
四、自定義異常類捕捉MethodArgumentNotValidException
@RestControllerAdvice
public class GlobalExceptionAdvice {
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public JsonData validException(MethodArgumentNotValidException e) {
//驗(yàn)證post請(qǐng)求的參數(shù)合法性
MethodArgumentNotValidException notValidException = e;
String msg = notValidException.getBindingResult().getFieldError().getDefaultMessage();
return JsonData.buildError(msg);
}
}
使用PostMan的測(cè)試結(jié)果如下:

具體的代碼可以在我的gitee上面 查看 ,springboot_validator
到此這篇關(guān)于SpringBoot整合Hibernate Validator實(shí)現(xiàn)參數(shù)驗(yàn)證功能的文章就介紹到這了,更多相關(guān)SpringBoot 參數(shù)驗(yàn)證 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)圖片與Base64編碼互轉(zhuǎn)
這篇文章主要介紹了Java中實(shí)現(xiàn)圖片與Base64編碼互轉(zhuǎn)的方法,比較實(shí)用,需要的朋友可以參考下。2016-06-06
Java線程池隊(duì)列PriorityBlockingQueue和SynchronousQueue詳解
這篇文章主要為大家介紹了Java線程池隊(duì)列PriorityBlockingQueue和SynchronousQueue詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
Maven打包所有依賴到一個(gè)可執(zhí)行jar中遇到的問(wèn)題
這篇文章主要給大家介紹了關(guān)于Maven打包所有依賴到一個(gè)可執(zhí)行jar中遇到的問(wèn)題,將依賴打入jar包,由于maven管理了所有的依賴,所以將項(xiàng)目的代碼和依賴打成一個(gè)包對(duì)它來(lái)說(shuō)是順理成章的功能,需要的朋友可以參考下2023-10-10
FluentMybatis實(shí)現(xiàn)mybatis動(dòng)態(tài)sql拼裝和fluent api語(yǔ)法
本文主要介紹了FluentMybatis實(shí)現(xiàn)mybatis動(dòng)態(tài)sql拼裝和fluent api語(yǔ)法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
分布式醫(yī)療掛號(hào)系統(tǒng)Nacos微服務(wù)Feign遠(yuǎn)程調(diào)用數(shù)據(jù)字典
這篇文章主要為大家介紹了分布式醫(yī)療掛號(hào)系統(tǒng)Nacos微服務(wù)Feign遠(yuǎn)程調(diào)用數(shù)據(jù)字典,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2022-04-04
Java測(cè)試題 實(shí)現(xiàn)一個(gè)注冊(cè)功能過(guò)程解析
這篇文章主要介紹了Java測(cè)試題 實(shí)現(xiàn)一個(gè)注冊(cè)功能過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
Java內(nèi)存劃分:運(yùn)行時(shí)數(shù)據(jù)區(qū)域
聽(tīng)說(shuō)Java運(yùn)行時(shí)環(huán)境的內(nèi)存劃分是挺進(jìn)BAT的必經(jīng)之路,這篇文章主要給大家介紹了關(guān)于Java運(yùn)行時(shí)數(shù)據(jù)區(qū)域(內(nèi)存劃分)的相關(guān)資料,需要的朋友可以參考下2021-07-07
JAVA多線程實(shí)現(xiàn)生產(chǎn)者消費(fèi)者的實(shí)例詳解
這篇文章主要介紹了JAVA多線程實(shí)現(xiàn)生產(chǎn)者消費(fèi)者的實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06
淺談springMVC接收前端json數(shù)據(jù)的總結(jié)
下面小編就為大家分享一篇淺談springMVC接收前端json數(shù)據(jù)的總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03

