欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

校驗(yàn)非空的注解@NotNull如何取得自定義的message

 更新時(shí)間:2021年09月28日 17:06:54   作者:紳士jiejie  
這篇文章主要介紹了校驗(yàn)非空的注解@NotNull如何取得自定義的message,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

校驗(yàn)非空的注解@NotNull如何取得自定義的message

由于項(xiàng)目表單需要校驗(yàn)字段過多,一個(gè)一個(gè)去判空太麻煩,所以用了@NotNull注解,字段為空會(huì)拋出MethodArgumentNotValidException異常。

接下來要取得@NotNull(message=“自定義異常”)里的message內(nèi)容給前端顯示

直接貼上代碼:

public String  getMessage(MethodArgumentNotValidException exception){
String message =  exception.getBindingResult().getFieldError().getDefaultMessage();
return message;
}

用法:定義一個(gè)全局異常處理

一旦發(fā)生該類異常,就會(huì)捕捉處理,返回給前端信息,返回類Result要根據(jù)自己項(xiàng)目業(yè)務(wù)需要來定義

在這里插入圖片描述

@NotNull 等注解的簡(jiǎn)單使用

springboot 2.3.0 以后不會(huì)自動(dòng)引入jar包,所以要添加以下maven

2.3以前則不需要引入maven包

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

注冊(cè)一個(gè)賬號(hào), 有賬號(hào)+密碼

前端會(huì)做一個(gè)判空,但是后端同時(shí)也要做一個(gè)判空,防止url直接訪問

這時(shí)后端的代碼通常是

if(name!=null){
 return "賬號(hào)不能為空,請(qǐng)重新輸入";
}
else if(password!=null){
 return "密碼不能為空,請(qǐng)重新輸入";
}

這樣就會(huì)顯得特別low,而且極不美觀

這時(shí)候就要用到一個(gè)注解@NotNull

簡(jiǎn)單舉例說明:

@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層

簡(jiǎn)單舉例說明

@RestController
public class TestController {
    @RequestMapping("test1")
    public Object test1(@Valid @RequestBody UserInfo userInfo,BindingResult result){
  //判斷有沒有異常錯(cuò)誤,如果有則返回默認(rèn)消息
       if (result.hasErrors()){
            String defaultMessage = result.getFieldError().getDefaultMessage();
            return defaultMessage;
        }
        //打印一下數(shù)據(jù)結(jié)構(gòu)
        System.out.println(userInfo); 
        //如果沒有錯(cuò)誤,返回注冊(cè)成功
        return "注冊(cè)成功";
    }
  }

在這里插入圖片描述

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

在這里插入圖片描述

返回我們的設(shè)定

name 為null 同理,會(huì)按順序判斷!

但是問題又來了,難道我們每個(gè)Controller層的方法里面都要寫一個(gè)判斷方法?

當(dāng)然不,這時(shí)候就要用到全局異常類了

起一個(gè)類

@ControllerAdvice
public class ControllerException {
    @ResponseBody
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Object handleValidException(MethodArgumentNotValidException e) {
    
        //將錯(cuò)誤信息返回給前臺(tái)
        return e.getBindingResult().getFieldError().getDefaultMessage();
    }
}

為了有所區(qū)分,寫下另一個(gè)訪問方法

 @RequestMapping("test2")
    public Object test1(@Valid @RequestBody UserInfo userInfo){
        
        System.out.println(userInfo);
        return "注冊(cè)成功";
    }

這時(shí)候我們傳入?yún)?shù)

在這里插入圖片描述

到此結(jié)束,再也不用寫一堆各種判空了

附上 部分注解

  • @Null 限制只能為null
  • @NotNull 限制必須不為null
  • @AssertFalse 限制必須為false
  • @AssertTrue 限制必須為true
  • @DecimalMax(value) 限制必須為一個(gè)不大于指定值的數(shù)字
  • @DecimalMin(value) 限制必須為一個(gè)不小于指定值的數(shù)字
  • @Digits(integer,fraction) 限制必須為一個(gè)小數(shù),且整數(shù)部分的位數(shù)不能超過integer,小數(shù)部分的位數(shù)不能超過fraction
  • @Future 限制必須是一個(gè)將來的日期
  • @Max(value) 限制必須為一個(gè)不大于指定值的數(shù)字
  • @Min(value) 限制必須為一個(gè)不小于指定值的數(shù)字
  • @Past 限制必須是一個(gè)過去的日期
  • @Pattern(value) 限制必須符合指定的正則表達(dá)式
  • @Size(max,min) 限制字符長度必須在min到max之間
  • @Past 驗(yàn)證注解的元素值(日期類型)比當(dāng)前時(shí)間早
  • @NotEmpty 驗(yàn)證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0)
  • @NotBlank 驗(yàn)證注解的元素值不為空(不為null、去除首位空格后長度為0),不同于@NotEmpty,@NotBlank只應(yīng)用于字符串且在比較時(shí)會(huì)去除字符串的空格
  • @Email 驗(yàn)證注解的元素值是Email,也可以通過正則表達(dá)式和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) {
        //日志記錄錯(cuò)誤信息
       // log.error(Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage());
        //將錯(cuò)誤信息返回給前臺(tái)
       // return BaseResult.fail(500, Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage());
        return e.getBindingResult().getFieldError().getDefaultMessage();
    }
}

不需要寫B(tài)indingResult 也可以返回message

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java使用UDP實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通信

    java使用UDP實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通信

    這篇文章主要為大家詳細(xì)介紹了java使用UDP實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通信,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之高級(jí)排序

    帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之高級(jí)排序

    這篇文章主要為大家介紹了Java數(shù)據(jù)結(jié)構(gòu)和算法之高級(jí)排序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 關(guān)于Java中的mysql時(shí)區(qū)問題詳解

    關(guān)于Java中的mysql時(shí)區(qū)問題詳解

    這篇文章主要給大家介紹了關(guān)于Java中mysql時(shí)區(qū)問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Spring Security實(shí)現(xiàn)基于角色的訪問控制框架

    Spring Security實(shí)現(xiàn)基于角色的訪問控制框架

    Spring Security是一個(gè)功能強(qiáng)大的安全框架,提供了基于角色的訪問控制、身份驗(yàn)證、授權(quán)等安全功能,可輕松保護(hù)Web應(yīng)用程序的安全,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-04-04
  • 關(guān)于Idea中的.properties文件顯示問題

    關(guān)于Idea中的.properties文件顯示問題

    這篇文章主要介紹了關(guān)于Idea中的.properties文件顯示問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java EE中的編碼問題及解決方案(總結(jié))

    Java EE中的編碼問題及解決方案(總結(jié))

    在JavaEE開發(fā)中,處理字符編碼問題是確保數(shù)據(jù)準(zhǔn)確傳輸和顯示的關(guān)鍵,常見的編碼問題包括表單提交亂碼、JSP頁面編碼、請(qǐng)求參數(shù)編碼不一致等,本文給大家介紹Java EE中的編碼問題及解決方案,感興趣的朋友一起看看吧
    2024-10-10
  • Java中的System.arraycopy()淺復(fù)制方法詳解

    Java中的System.arraycopy()淺復(fù)制方法詳解

    這篇文章主要介紹了Java中的System.arraycopy()淺復(fù)制方法詳解,Java數(shù)組的復(fù)制操作可以分為深度復(fù)制和淺度復(fù)制,簡(jiǎn)單來說深度復(fù)制,可以將對(duì)象的值和對(duì)象的內(nèi)容復(fù)制;淺復(fù)制是指對(duì)對(duì)象引用的復(fù)制,需要的朋友可以參考下
    2023-11-11
  • 深入理解Java中Filter的作用種類及應(yīng)用場(chǎng)景

    深入理解Java中Filter的作用種類及應(yīng)用場(chǎng)景

    Filter(過濾器)是Java Web中的一種重要組件,可以對(duì)請(qǐng)求和響應(yīng)進(jìn)行攔截處理,對(duì)數(shù)據(jù)進(jìn)行過濾和處理。Filter可以實(shí)現(xiàn)許多功能,如:鑒權(quán)、日志記錄、字符編碼轉(zhuǎn)換、數(shù)據(jù)壓縮、請(qǐng)求重定向等等
    2023-04-04
  • Java 在生活中的 10 大應(yīng)用

    Java 在生活中的 10 大應(yīng)用

    這篇文章主要給大家分享Java 在生活中的 10 大應(yīng)用,桌面圖形用戶界面、移動(dòng)應(yīng)用、人工智能、網(wǎng)絡(luò)應(yīng)用程序、大數(shù)據(jù)技術(shù)、游戲應(yīng)用、商業(yè)應(yīng)用、嵌入式系統(tǒng)、云應(yīng)用、科學(xué)應(yīng)用,下文來看具體應(yīng)用介紹,需要的朋友可以參考一下
    2021-11-11
  • IDEA新建springboot項(xiàng)目時(shí)未生成pom.xml文件的解決操作

    IDEA新建springboot項(xiàng)目時(shí)未生成pom.xml文件的解決操作

    這篇文章主要給大家介紹了關(guān)于IDEA新建springboot項(xiàng)目時(shí)未生成pom.xml文件的解決操作方法,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02

最新評(píng)論