溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

校驗非空的注解@NotNull怎么取得自定義的message

發(fā)布時間:2021-09-29 09:02:06 來源:億速云 閱讀:799 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹了校驗非空的注解@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ù)需要來定義

校驗非空的注解@NotNull怎么取得自定義的message

@NotNull 等注解的簡單使用

springboot 2.3.0 以后不會自動引入jar包,所以要添加以下maven

2.3以前則不需要引入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;
}

Controller層

簡單舉例說明

@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 "注冊成功";
    }
  }

校驗非空的注解@NotNull怎么取得自定義的message

用postMan 傳入json 參數(shù),name有值,年齡超過30歲

校驗非空的注解@NotNull怎么取得自定義的message

返回我們的設(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ù)

校驗非空的注解@NotNull怎么取得自定義的message

到此結(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í)!

向AI問一下細節(jié)

免責(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)容。

AI