SpringBoot整合Hibernate Validator實現參數驗證功能
在前后端分離的開發(fā)模式中,后端對前端傳入的參數的校驗成了必不可少的一個環(huán)節(jié)。但是在多參數的情況下,在controller層加上參數驗證,會顯得特別臃腫,并且會有許多的重復代碼。這里可以引用Hibernate Validator來解決這個問題,直接在實體類進行參數校驗,驗證失敗直接返回錯誤信息給前端,減少controller層的代碼量。
一、xml引入Hibernate Validator
<!-- 驗證器 --> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.1.5.Final</version> </dependency>
二、通過注解在實體類進行參數校驗
@Data public class UserModel { @NotNull(message = "用戶名稱不能為空!") private String userName; @NotNull(message = "age不能為null!") @Range(min = 1, max = 888, message = "范圍為1至888") private Integer age; /** * 日期格式化轉換 */ @NotNull(message = "日期不能為null!") private Date date; }
這里用到的參數校驗的注解有@NotNull和@Range,message是到時候我們返回給前端的信息,注解的具體意思如下:
- @Null 被注釋的元素必須為null
- @NotNull 被注釋的元素不能為null
- @AssertTrue 被注釋的元素必須為true
- @AssertFalse 被注釋的元素必須為false
- @Min(value) 被注釋的元素必須是一個數字,其值必須大于等于指定的最小值
- @Max(value) 被注釋的元素必須是一個數字,其值必須小于等于指定的最大值
- @DecimalMin(value) 被注釋的元素必須是一個數字,其值必須大于等于指定的最小值
- @DecimalMax(value) 被注釋的元素必須是一個數字,其值必須小于等于指定的最大值
- @Size(max,min) 被注釋的元素的大小必須在指定的范圍內。
- @Digits(integer,fraction) 被注釋的元素必須是一個數字,其值必須在可接受的范圍內
- @Past 被注釋的元素必須是一個過去的日期
- @Future 被注釋的元素必須是一個將來的日期
- @Pattern(value) 被注釋的元素必須符合指定的正則表達式。
- @Email 被注釋的元素必須是電子郵件地址
- @Length 被注釋的字符串的大小必須在指定的范圍內
- @NotEmpty 被注釋的字符串必須非空
- @Range 被注釋的元素必須在合適的范圍內
三、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層這里只需要在實體類的前面加上@Valid注解,這個注解可以實現數據的驗證。這里BindingResult是存儲了校驗時的錯誤信息,驗證有誤時將錯誤信息返回給前端。這里不使用BindingResult的時候,控制臺會報MethodArgumentNotValidException,這里可以通過自定義異常類來捕捉它,然后去掉BindingResult,以及難看的if判斷。
四、自定義異常類捕捉MethodArgumentNotValidException
@RestControllerAdvice public class GlobalExceptionAdvice { @ExceptionHandler(value = MethodArgumentNotValidException.class) public JsonData validException(MethodArgumentNotValidException e) { //驗證post請求的參數合法性 MethodArgumentNotValidException notValidException = e; String msg = notValidException.getBindingResult().getFieldError().getDefaultMessage(); return JsonData.buildError(msg); } }
使用PostMan的測試結果如下:
具體的代碼可以在我的gitee上面 查看 ,springboot_validator
到此這篇關于SpringBoot整合Hibernate Validator實現參數驗證功能的文章就介紹到這了,更多相關SpringBoot 參數驗證 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java中的JPA實體關系:JPA一對一,一對多(多對一),多對多
Java Persistence API(JPA)是Java平臺上的一個對象關系映射(ORM)規(guī)范,用于簡化數據庫操作,其中實體關系的映射是核心內容之一,本文將深入淺出地探討JPA中的三種基本實體關系類型:一對一、一對多、多對多,揭示常見問題、易錯點及其避免策略,希望能幫助大家2024-06-06使用springBoot中的info等級通過druid打印sql
這篇文章主要介紹了使用springBoot中的info等級通過druid打印sql,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09