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

關(guān)于Spring?Validation數(shù)據(jù)校檢的使用流程分析

 更新時(shí)間:2024年11月08日 09:58:50   投稿:mrr  
在實(shí)際項(xiàng)目中,對(duì)客戶端傳遞到服務(wù)端的參數(shù)進(jìn)行校驗(yàn)至關(guān)重要,SpringValidation提供了一種便捷的方式來實(shí)現(xiàn)這一需求,通過在POJO類的屬性上添加檢查注解,本文給大家介紹Spring?Validation數(shù)據(jù)校檢的使用流程,感興趣的朋友一起看看吧

Spring Validation

1 關(guān)于Spring Validation

在實(shí)際項(xiàng)目我們需要對(duì)客戶端傳遞到服務(wù)端的參數(shù)進(jìn)行校驗(yàn),用于判定請(qǐng)求參數(shù)的合法性,假如請(qǐng)求參數(shù)不合法則不可以再去執(zhí)行后續(xù)的業(yè)務(wù)了。那如何校驗(yàn)?zāi)兀?/p>

一種方式是我們?cè)诳刂茖臃椒ㄖ忻看味甲约哼M(jìn)行參數(shù)有效值的判斷,不合法可以拋出異常,但是工作量和代碼復(fù)雜度會(huì)比較高;

第二種方式就是采用市場(chǎng)上主流的 Spring Validation 框架去實(shí)現(xiàn)校驗(yàn),所以 Spring Validation 框架的主要作用是 檢查參數(shù)的基本有效性。

2 使用流程

在Spring Boot工程中,使用此框架需要添加依賴,并刷新maven

<!-- Spring Boot支持Spring Validation的依賴項(xiàng),用于檢查參數(shù)的基本有效性 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

3 快速入門

1.在處理請(qǐng)求的方法的參數(shù)列表中,在POJO類型的參數(shù)上添加@Validated注解,表示需要通過Spring Validation框架檢查此參數(shù),例如UserController中注冊(cè)功能:

@ApiOperation(value = "注冊(cè)功能")
@PostMapping("reg")
public JsonResult reg(@RequestBody @Validated UserRegDTO userRegDTO){}

2.在此POJO類中的屬性上,添加對(duì)應(yīng)的檢查注解,以配置檢查規(guī)則,

例如,添加@NotNull注解,就表示“不允許為null”的規(guī)則!

UserRegDTO

@Data
public class UserRegDTO {
    @NotNull
    @ApiModelProperty(value = "用戶名", required = true, example = "趙麗穎")
    private String username;
    @ApiModelProperty(value = "密碼", required = true, example = "123456")
    private String password;
    @ApiModelProperty(value = "昵稱", required = true, example = "螢火蟲")
    private String nickname;
}

重啟工程,在Knife4j中測(cè)試,當(dāng)提交請(qǐng)求時(shí),如果username參數(shù)為 null,服務(wù)器端將響應(yīng)400錯(cuò)誤。

同時(shí)在終端也會(huì)出現(xiàn)異常

4 運(yùn)行異常處理

4.1 說明

在使用Spring Validation框架執(zhí)行參數(shù)的檢查時(shí),如果檢查不通過,除了響應(yīng)400錯(cuò)誤以外,在控制臺(tái)還會(huì)拋出錯(cuò)誤:MethodArgumentNotValidException 使用全局異常處理器解決。

[org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public cn.tedu._043mvcweibo.common.response.JsonResult cn.tedu._043mvcweibo.controller.UserController.reg(cn.tedu._043mvcweibo.pojo.dto.UserRegDTO): [Field error in object 'userRegDTO' on field 'username': rejected value [null]; codes [NotNull.userRegDTO.username,NotNull.username,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [userRegDTO.username,username]; arguments []; default message [username]]; default message [不能為null]] ]

4.2 處理異常

使用全局異常處理器來處理 MethodArgumentNotValidException 異常

第1步:全局異常處理器 GlobalExceptionHandler 中定義處理異常方法

@ExceptionHandler
public JsonResult doHandleMethodArgumentNotValidException(MethodArgumentNotValidException ex){
    return new JsonResult(3002, "請(qǐng)求參數(shù)錯(cuò)誤");
}

第2步:重啟工程,在Knife4j中測(cè)試

4.3 明確提示消息

當(dāng)提交的username的值為 null 時(shí),可以發(fā)現(xiàn)異常已被處理!

但是,處理結(jié)果并不合適,因?yàn)?,客戶端得到此結(jié)果后,仍無法明確出現(xiàn)了什么錯(cuò)誤!

所有的檢查注解都可以配置message參數(shù),用于對(duì)錯(cuò)誤進(jìn)行描述。

第1步:@NotNull 注解中添加 message 參數(shù)

@NotNull(message = "必須提交用戶名")
private String username;

第2步:自定義枚舉狀態(tài)碼 StatusCode

VALIDATE_ERROR(3002, "參數(shù)校驗(yàn)失敗")

第3步:異常方法中獲取提示信息 message

在處理異常時(shí),需要調(diào)用MethodArgumentNotValidException對(duì)象的getFieldError().getDefaultMessage()獲取以上配置的描述文本

@ExceptionHandler
public JsonResult handleBindException(MethodArgumentNotValidException ex){
    /*
    	ex.getFieldError().getDefaultMessage():獲取 @NotNull(message="xxx") 中message的消息
    */
    String message = ex.getFieldError().getDefaultMessage();
    return new JsonResult(StatusCode.VALIDATE_ERROR, message);
}

第4步:重啟工程,在Knife4j中測(cè)試

5 常用注解

5.1 @NotNull注解

  • 作用:用于驗(yàn)證對(duì)象是否為 null
  • 用法:@NotNull 注解用于對(duì)象類型上
  • 示例
@NotNull(message = "用戶名不能為null")
private String username;

5.2 @NotEmpty 注解

  • 作用:用于驗(yàn)證字符串是否為空,并且會(huì)檢查是否為 null 值(為null值時(shí)報(bào)錯(cuò))
  • 用法:用于字符串類型上
  • 示例
@NotEmpty(message = "用戶名不能為空")
private String username;

5.3 @NotBlank 注解

  • 作用:不允許為空白,即不允許是“僅由空格、TAB等空白值組成的字符串”,也不允許為空字符串,也不允許為空值null
  • 用法:用于字符串類型上
  • 示例
@NotBlank(message = "用戶名不能為空白串")
private String username;

5.4 @Size 注解

  • 作用:可以指定最小值和最大值限制字符串的長(zhǎng)度
  • 用法:用于字符串類型參數(shù)
  • 示例
@Size(min = 6, max = 20, message = "用戶名長(zhǎng)度必須在6到20之間")
private String username;

5.5 @Range 注解

  • 作用:用于驗(yàn)證數(shù)字類型字段的取值范圍,通過配置min和max屬性來限制數(shù)值類型參數(shù)的值區(qū)間包括最小值和最大值
  • 用法:用于數(shù)值類型參數(shù)
  • 示例
@Range(min = 1, max = 10, message = "年齡必須在1-10歲之間")
private int age;
@Range(min = 0.1, max = 1.0, message = "成績(jī)必須在0.1到1.0之間")
private double score;

6 非POJO參數(shù)校驗(yàn)

在 Spring Validation 中,除了對(duì) POJO(Plain Old Java Object)進(jìn)行校驗(yàn)的功能外,還支持對(duì)非 POJO 進(jìn)行校驗(yàn),比如 String、Integer、Double 等類型的參數(shù)。

6.1 使用流程

在當(dāng)前方法所在的類上添加 @Validated 注解在參數(shù)上添加對(duì)應(yīng)的檢查注解

6.2 使用示例

對(duì)于 id 參數(shù)進(jìn)行范圍校驗(yàn),范圍只能在1-10之間

第1步:在類 WeiboController 中添加 @Validated 注解

@Validated
public class WeiboController {}

第2步:在控制器方法參數(shù) id 上添加對(duì)應(yīng)的檢查注解

public JsonResult selectById(@Range(min = 1, max=10, message = "請(qǐng)?zhí)峤缓戏ǖ腎D值!") @RequestParam int id, String username)

第3步:重啟工程,在Knife4j或者瀏覽器中測(cè)試

到此這篇關(guān)于Spring Validation數(shù)據(jù)校檢的文章就介紹到這了,更多相關(guān)Spring Validation數(shù)據(jù)校檢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解用Eclipse如何創(chuàng)建Web項(xiàng)目

    詳解用Eclipse如何創(chuàng)建Web項(xiàng)目

    本篇文章主要介紹了詳解用Eclipse如何創(chuàng)建Web項(xiàng)目,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • IDEA集成git和使用步驟的實(shí)現(xiàn)方法

    IDEA集成git和使用步驟的實(shí)現(xiàn)方法

    這篇文章主要介紹了IDEA集成git和使用步驟的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 通過openOffice將office文件轉(zhuǎn)成pdf

    通過openOffice將office文件轉(zhuǎn)成pdf

    這篇文章主要介紹了通過openOffice將office文件轉(zhuǎn)成pdf,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 自定義注解和springAOP捕獲Service層異常,并處理自定義異常操作

    自定義注解和springAOP捕獲Service層異常,并處理自定義異常操作

    這篇文章主要介紹了自定義注解和springAOP捕獲Service層異常,并處理自定義異常操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java基礎(chǔ)之反射和泛型以及注解

    java基礎(chǔ)之反射和泛型以及注解

    這篇文章主要介紹了 java基礎(chǔ)之反射和泛型以及注解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Java開發(fā)之spring security實(shí)現(xiàn)基于MongoDB的認(rèn)證功能

    Java開發(fā)之spring security實(shí)現(xiàn)基于MongoDB的認(rèn)證功能

    這篇文章主要介紹了Java開發(fā)之spring security實(shí)現(xiàn)基于MongoDB的認(rèn)證功能,結(jié)合實(shí)例形式分析了spring security在非JDBC環(huán)境下的自定義認(rèn)證服務(wù)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-11-11
  • java線程封閉之棧封閉和ThreadLocal

    java線程封閉之棧封閉和ThreadLocal

    這篇文章主要介紹了java線程封閉之棧封閉和ThreadLocal,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 詳解Java的Hibernate框架中的緩存與二級(jí)緩存

    詳解Java的Hibernate框架中的緩存與二級(jí)緩存

    這篇文章主要介紹了Java的Hibernate框架中的緩存與二級(jí)緩存,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • 詳解IDEA2021.2安裝后的配置及重裝問題

    詳解IDEA2021.2安裝后的配置及重裝問題

    這篇文章主要介紹了IDEA2021.2安裝后的配置及重裝,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Spring Boot2.0實(shí)現(xiàn)靜態(tài)資源版本控制詳解

    Spring Boot2.0實(shí)現(xiàn)靜態(tài)資源版本控制詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot2.0實(shí)現(xiàn)靜態(tài)資源版本控制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11

最新評(píng)論