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

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

 更新時(shí)間:2024年11月08日 09:58:50   投稿:mrr  
在實(shí)際項(xiàng)目中,對客戶端傳遞到服務(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)目我們需要對客戶端傳遞到服務(wù)端的參數(shù)進(jìn)行校驗(yàn),用于判定請求參數(shù)的合法性,假如請求參數(shù)不合法則不可以再去執(zhí)行后續(xù)的業(yè)務(wù)了。那如何校驗(yàn)?zāi)兀?/p>

一種方式是我們在控制層方法中每次都自己進(jìn)行參數(shù)有效值的判斷,不合法可以拋出異常,但是工作量和代碼復(fù)雜度會比較高;

第二種方式就是采用市場上主流的 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.在處理請求的方法的參數(shù)列表中,在POJO類型的參數(shù)上添加@Validated注解,表示需要通過Spring Validation框架檢查此參數(shù),例如UserController中注冊功能:

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

2.在此POJO類中的屬性上,添加對應(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中測試,當(dāng)提交請求時(shí),如果username參數(shù)為 null,服務(wù)器端將響應(yīng)400錯誤。

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

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

4.1 說明

在使用Spring Validation框架執(zhí)行參數(shù)的檢查時(shí),如果檢查不通過,除了響應(yīng)400錯誤以外,在控制臺還會拋出錯誤: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, "請求參數(shù)錯誤");
}

第2步:重啟工程,在Knife4j中測試

4.3 明確提示消息

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

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

所有的檢查注解都可以配置message參數(shù),用于對錯誤進(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對象的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中測試

5 常用注解

5.1 @NotNull注解

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

5.2 @NotEmpty 注解

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

5.3 @NotBlank 注解

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

5.4 @Size 注解

  • 作用:可以指定最小值和最大值限制字符串的長度
  • 用法:用于字符串類型參數(shù)
  • 示例
@Size(min = 6, max = 20, message = "用戶名長度必須在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 = "成績必須在0.1到1.0之間")
private double score;

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

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

6.1 使用流程

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

6.2 使用示例

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

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

@Validated
public class WeiboController {}

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

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

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

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

相關(guān)文章

  • 冒泡排序的原理及java代碼實(shí)現(xiàn)

    冒泡排序的原理及java代碼實(shí)現(xiàn)

    冒泡排序法:關(guān)鍵字較小的記錄好比氣泡逐趟上浮,關(guān)鍵字較大的記錄好比石塊下沉,每趟有一塊最大的石塊沉底。算法本質(zhì):(最大值是關(guān)鍵點(diǎn),肯定放到最后了,如此循環(huán))每次都從第一位向后滾動比較,使最大值沉底,最小值上升一次,最后一位向前推進(jìn)
    2016-02-02
  • SpringBoot整合Kafka實(shí)現(xiàn)高可用消息隊(duì)列集群詳解

    SpringBoot整合Kafka實(shí)現(xiàn)高可用消息隊(duì)列集群詳解

    Apache?Kafka是一個分布式流處理平臺,這篇文章主要介紹了SpringBoot如何整合Kafka實(shí)現(xiàn)高可用消息隊(duì)列集群,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2026-01-01
  • Java 代碼檢查工具之PMD入門使用詳細(xì)教程

    Java 代碼檢查工具之PMD入門使用詳細(xì)教程

    這篇文章主要介紹了Java 代碼檢查工具之PMD入門使用詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Java Collection集合的三種遍歷方式詳解

    Java Collection集合的三種遍歷方式詳解

    Collection集合遍歷的方式有三種,迭代器foreach/增強(qiáng)for循環(huán)lambda表達(dá)式,這篇文章主要介紹了Java Collection集合的三種遍歷方式,需要的朋友可以參考下
    2022-11-11
  • springboot執(zhí)行延時(shí)任務(wù)之DelayQueue實(shí)例

    springboot執(zhí)行延時(shí)任務(wù)之DelayQueue實(shí)例

    這篇文章主要介紹了springboot執(zhí)行延時(shí)任務(wù)之DelayQueue實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Java8?lambda表達(dá)式的10個實(shí)例講解

    Java8?lambda表達(dá)式的10個實(shí)例講解

    這篇文章主要介紹了Java8?lambda表達(dá)式的10個實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Ubuntu搭建Java開發(fā)環(huán)境筆記

    Ubuntu搭建Java開發(fā)環(huán)境筆記

    這篇文章主要介紹了Ubuntu搭建Java開發(fā)環(huán)境筆記,本文講解了JDK安裝、MyEclipse安裝及第一個Hello world程序等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • 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ì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02
  • maven的pom文件與打包詳解

    maven的pom文件與打包詳解

    pom文件定于了一個maven項(xiàng)目的maven配置,一般pom文件的放在項(xiàng)目或者模塊的根目錄下。本文詳細(xì)的介紹了pom文件配置,感興趣的可以了解一下
    2021-08-08
  • SpringBoot Maven打包失敗報(bào):class lombok.javac.apt.LombokProcessor錯誤的解決辦法

    SpringBoot Maven打包失敗報(bào):class lombok.javac.apt.Lombo

    最新項(xiàng)目部署的時(shí)候,出現(xiàn)了一個maven打包失敗的問題,報(bào):class lombok.javac.apt.LombokProcessor錯誤,所以本文給大家介紹了如何解決SpringBoot Maven 打包失?。篶lass lombok.javac.apt.LombokProcessor 錯誤,需要的朋友可以參考下
    2023-12-12

最新評論

潼关县| 六枝特区| 长兴县| 沈丘县| 鹰潭市| 时尚| 会理县| 会东县| 滁州市| 班戈县| 阳曲县| 临沭县| 新田县| 元谋县| 东港市| 安义县| 元阳县| 汉沽区| 广丰县| 双鸭山市| 离岛区| 宁武县| 浏阳市| 织金县| 湖南省| 高陵县| 南皮县| 论坛| 宣化县| 天峻县| 四子王旗| 运城市| 西宁市| 彩票| 大理市| 茌平县| 金华市| 贺兰县| 文登市| 双辽市| 玛多县|