最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

校驗(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) 限制字符長(zhǎng)度必須在min到max之間
  • @Past 驗(yàn)證注解的元素值(日期類型)比當(dāng)前時(shí)間早
  • @NotEmpty 驗(yàn)證注解的元素值不為null且不為空(字符串長(zhǎng)度不為0、集合大小不為0)
  • @NotBlank 驗(yàn)證注解的元素值不為空(不為null、去除首位空格后長(zhǎng)度為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編程之jdk1.4,jdk1.5和jdk1.6的區(qū)別分析(經(jīng)典)

    Java編程之jdk1.4,jdk1.5和jdk1.6的區(qū)別分析(經(jīng)典)

    這篇文章主要介紹了Java編程之jdk1.4,jdk1.5和jdk1.6的區(qū)別分析,結(jié)合實(shí)例形式較為詳細(xì)的分析說明了jdk1.4,jdk1.5和jdk1.6版本的使用區(qū)別,需要的朋友可以參考下
    2015-12-12
  • arthas排查jvm中CPU占用過高問題解決

    arthas排查jvm中CPU占用過高問題解決

    這篇文章主要介紹了arthas排查jvm中CPU占用過高問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • @JsonFormat?和?@DateTimeFormat?時(shí)間格式化注解(場(chǎng)景示例代碼)

    @JsonFormat?和?@DateTimeFormat?時(shí)間格式化注解(場(chǎng)景示例代碼)

    這篇文章主要介紹了@JsonFormat和@DateTimeFormat時(shí)間格式化注解,本文通過場(chǎng)景示例代碼詳解給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • gateway網(wǎng)關(guān)與前端請(qǐng)求跨域問題的解決方案

    gateway網(wǎng)關(guān)與前端請(qǐng)求跨域問題的解決方案

    這篇文章主要介紹了gateway網(wǎng)關(guān)與前端請(qǐng)求跨域問題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Spring boot將配置屬性注入到bean類中

    Spring boot將配置屬性注入到bean類中

    本篇文章主要介紹了Spring boot將配置屬性注入到bean類中,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • java日期處理工具類

    java日期處理工具類

    這篇文章主要為大家詳細(xì)介紹了java日期處理工具類,其次還介紹了日期處理的基礎(chǔ)知識(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • java調(diào)用Oracle存儲(chǔ)過程的方法實(shí)例

    java調(diào)用Oracle存儲(chǔ)過程的方法實(shí)例

    這篇文章介紹了java調(diào)用Oracle存儲(chǔ)過程的方法實(shí)例,有需要的朋友可以參考一下
    2013-09-09
  • Java鎖機(jī)制Lock用法示例

    Java鎖機(jī)制Lock用法示例

    這篇文章主要介紹了Java鎖機(jī)制Lock用法,結(jié)合具體實(shí)例形式分析了Java鎖機(jī)制的相關(guān)上鎖、釋放鎖、隱式鎖、顯式鎖等概念與使用技巧,需要的朋友可以參考下
    2018-08-08
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(7)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(7)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • 深入理解Spring中的Lookup(方法注入)

    深入理解Spring中的Lookup(方法注入)

    “Lookup方法”可以使Spring替換一個(gè)bean原有的,獲取其它對(duì)象具體的方法,并自動(dòng)返回在容器中的查找結(jié)果。下面這篇文章主要給大家介紹了關(guān)于Spring中Lookup(方法注入)的相關(guān)資料,需要的朋友可以參考下
    2018-05-05

最新評(píng)論

尚义县| 济源市| 凌源市| 旌德县| 玉山县| 景谷| 佛坪县| 临邑县| 拉萨市| 忻州市| 贺州市| 图木舒克市| 景谷| 安吉县| 奉节县| 阳曲县| 呼和浩特市| 济宁市| 迭部县| 湟源县| 渭南市| 东兰县| 清远市| 邛崃市| 水城县| 大英县| 宜章县| 额尔古纳市| 衡南县| 绩溪县| 白水县| 即墨市| 武义县| 石家庄市| 德保县| 无锡市| 旅游| 新宁县| 邢台市| 商城县| 淳化县|