您好,登錄后才能下訂單哦!
這篇文章主要介紹了校驗非空的注解@NotNull怎么取得自定義的message,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
由于項目表單需要校驗字段過多,一個一個去判空太麻煩,所以用了@NotNull注解,字段為空會拋出MethodArgumentNotValidException異常。
接下來要取得@NotNull(message=“自定義異?!?里的message內(nèi)容給前端顯示
直接貼上代碼:
public String getMessage(MethodArgumentNotValidException exception){ String message = exception.getBindingResult().getFieldError().getDefaultMessage(); return message; }
一旦發(fā)生該類異常,就會捕捉處理,返回給前端信息,返回類Result要根據(jù)自己項目業(yè)務(wù)需要來定義
springboot 2.3.0 以后不會自動引入jar包,所以要添加以下maven
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
注冊一個賬號, 有賬號+密碼
前端會做一個判空,但是后端同時也要做一個判空,防止url直接訪問
這時后端的代碼通常是
if(name!=null){ return "賬號不能為空,請重新輸入"; } else if(password!=null){ return "密碼不能為空,請重新輸入"; }
這樣就會顯得特別low,而且極不美觀
這時候就要用到一個注解@NotNull
簡單舉例說明:
@Data public class UserInfo { @NotNull(message = "姓名不能為null") private String name; @Max(value = 30,message = "年齡不能超過30") private Integer age; private Integer password; private String sex; }
簡單舉例說明
@RestController public class TestController { @RequestMapping("test1") public Object test1(@Valid @RequestBody UserInfo userInfo,BindingResult result){ //判斷有沒有異常錯誤,如果有則返回默認消息 if (result.hasErrors()){ String defaultMessage = result.getFieldError().getDefaultMessage(); return defaultMessage; } //打印一下數(shù)據(jù)結(jié)構(gòu) System.out.println(userInfo); //如果沒有錯誤,返回注冊成功 return "注冊成功"; } }
用postMan 傳入json 參數(shù),name有值,年齡超過30歲
返回我們的設(shè)定
name 為null 同理,會按順序判斷!
但是問題又來了,難道我們每個Controller層的方法里面都要寫一個判斷方法?
當(dāng)然不,這時候就要用到全局異常類了
起一個類
@ControllerAdvice public class ControllerException { @ResponseBody @ExceptionHandler(MethodArgumentNotValidException.class) public Object handleValidException(MethodArgumentNotValidException e) { //將錯誤信息返回給前臺 return e.getBindingResult().getFieldError().getDefaultMessage(); } }
為了有所區(qū)分,寫下另一個訪問方法
@RequestMapping("test2") public Object test1(@Valid @RequestBody UserInfo userInfo){ System.out.println(userInfo); return "注冊成功"; }
這時候我們傳入?yún)?shù)
到此結(jié)束,再也不用寫一堆各種判空了
@Null
限制只能為null
@NotNull
限制必須不為null
@AssertFalse
限制必須為false
@AssertTrue
限制必須為true
@DecimalMax(value)
限制必須為一個不大于指定值的數(shù)字
@DecimalMin(value)
限制必須為一個不小于指定值的數(shù)字
@Digits(integer,fraction)
限制必須為一個小數(shù),且整數(shù)部分的位數(shù)不能超過integer,小數(shù)部分的位數(shù)不能超過fraction
@Future
限制必須是一個將來的日期
@Max(value)
限制必須為一個不大于指定值的數(shù)字
@Min(value)
限制必須為一個不小于指定值的數(shù)字
@Past
限制必須是一個過去的日期
@Pattern(value)
限制必須符合指定的正則表達式
@Size(max,min)
限制字符長度必須在min到max之間
@Past
驗證注解的元素值(日期類型)比當(dāng)前時間早
@NotEmpty
驗證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0)
@NotBlank
驗證注解的元素值不為空(不為null、去除首位空格后長度為0),不同于@NotEmpty,@NotBlank只應(yīng)用于字符串且在比較時會去除字符串的空格
@Email
驗證注解的元素值是Email,也可以通過正則表達式和flag指定自定義的email格式
二次更新:所有的Controller 都寫這樣的代碼就要封裝成異常類
import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; /** * @author :lsy * @date :Created in 2020/7/23 10:13 * @modified By: */ @ControllerAdvice public class ControllerException { private final static String EXCEPTION_MSG_KEY = "Exception message : "; @ResponseBody @ExceptionHandler(MethodArgumentNotValidException.class) public Object handleValidException(MethodArgumentNotValidException e) { //日志記錄錯誤信息 // log.error(Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage()); //將錯誤信息返回給前臺 // return BaseResult.fail(500, Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage()); return e.getBindingResult().getFieldError().getDefaultMessage(); } }
不需要寫B(tài)indingResult 也可以返回message
感謝你能夠認真閱讀完這篇文章,希望小編分享的“校驗非空的注解@NotNull怎么取得自定義的message”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。