精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

確保數(shù)據(jù)安全!使用Spring Boot 實現(xiàn)強大的API參數(shù)驗證

開發(fā) 前端
在 Spring Boot 項目中,可以通過在 messages.properties 文件中定義異常提示文本,并在代碼中通過 @Message 注解引用這些文本來實現(xiàn)國際化和自定義錯誤消息。

我們在項目開發(fā)中,出于對數(shù)據(jù)完整性的考慮,基本上每個接口都需要參數(shù)校驗,參數(shù)校驗可以自己手動校驗,也可以用工具校驗,今天松哥和大家分享如何利用 Spring Boot 自帶的工具實現(xiàn)參數(shù)校驗。

一 前端 or 后端?

參數(shù)校驗應該在前端完成還是后端完成?

正常來說,前后端都是需要校驗的,但是前后端校驗的目的各不相同。

一般來說,前端校驗可以滿足兩個需求:

  1. 用戶體驗:前端校驗可以即時反饋給用戶,減少等待服務器響應的時間,提高用戶體驗。
  2. 減輕服務器負擔:通過前端校驗可以過濾掉一些明顯無效的請求,減少不必要的服務器負載。

真正要確保數(shù)據(jù)完整性,還得要靠后端,后端校驗可以起到如下作用:

  1. 安全性:由于前端代碼可以被繞過或修改。后端校驗是安全的必要保障,確保即使前端校驗被繞過,數(shù)據(jù)的安全性和完整性也能得到保證。
  2. 數(shù)據(jù)一致性:后端校驗可以確保所有通過的請求都符合業(yè)務邏輯和數(shù)據(jù)模型的要求,保持數(shù)據(jù)的一致性。
  3. 容錯性:后端校驗可以處理那些前端未能覆蓋到的異常情況,作為最后一道防線。
  4. 跨平臺一致性:后端校驗確保了無論用戶通過何種客戶端(Web、移動應用、第三方 API 等)訪問服務,數(shù)據(jù)校驗的標準都是一致的。
  5. 維護和可擴展性:后端校驗邏輯通常更容易維護和更新,因為它們集中在服務器端,而不是分散在多個客戶端。
  6. 日志和監(jiān)控:后端可以記錄校驗失敗的請求,這對于監(jiān)控系統(tǒng)安全和進行問題診斷非常有用。

因此,后端校驗才能真正確保數(shù)據(jù)的完整性,今天松哥也是要和大家聊一聊后端數(shù)據(jù)校驗。

二 參數(shù)校驗注解

2.1 參數(shù)校驗依據(jù)

在 Spring Boot 中,數(shù)據(jù)校驗是通過 JSR303/JSR380 規(guī)范的 Bean Validation 實現(xiàn)的。

這里涉及到兩個概念,松哥和大家簡單說下。

JSR303 是 Bean Validation 的 1.0 版本,正式名稱為《Bean Validation》。它提供了一套注解和 API 來定義 Java 對象(Bean)的驗證規(guī)則。這些注解可以直接用于 Bean 的屬性上,以聲明式的方式定義驗證邏輯。JSR303 定義了一組標準的驗證注解,如 @NotNull、@Size、@Email 等,用于校驗對象的屬性是否滿足特定的條件。

而 JSR380 則是 Bean Validation 的 2.0 版本,也稱為《Jakarta Bean Validation 2.0》。隨著 JavaEE 向 JakartaEE 的遷移,JSR380 成為了新的規(guī)范。JSR380 在 JSR303 的基礎上進行了擴展和改進,增加了新的注解、改進了 API,并提供了更好的集成方式。JSR380 的注解與 JSR303 兼容,但增加了一些新的注解,如 @Email 的 message 屬性支持國際化,以及 @PositiveOrZero、@NegativeOrZero 等。

松哥下面案例主要和小伙伴們分享最新的 JSR380 規(guī)范中的參數(shù)校驗注解。

2.2 代碼實踐

現(xiàn)在我們創(chuàng)建一個 Spring Boot 項目,使用當前最新版,并且引入?yún)?shù)校驗依賴,最終創(chuàng)建好的工程依賴如下:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

假設我現(xiàn)在有一個 UserDto 類,需要進行參數(shù)校驗,那么我可以按照如下方式定義 UserDto:

/**
 * @author:江南一點雨
 * @site:http://www.javaboy.org
 * @微信公眾號:江南一點雨
 * @github:https://github.com/lenve
 * @gitee:https://gitee.com/lenve
 */
public class UserDto {
    @NotNull(message = "用戶名不能為空")
    private String username;
    @NotBlank(message = "密碼不能為空")
    private String password;
    @NotEmpty(message = "郵箱不能為空")
    private String email;
    //省略 getter/setter


    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

接下來在 Controller 的方法參數(shù)前使用 @Validated 注解來開啟校驗。

/**
 * @author:江南一點雨
 * @site:http://www.javaboy.org
 * @微信公眾號:江南一點雨
 * @github:https://github.com/lenve
 * @gitee:https://gitee.com/lenve
 */
@RestController
public class UserController {
    @GetMapping("/hello")
    public String hello(@Validated UserDto userDto, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            // 處理校驗失敗情況
        }
        return "200";
    }
}

當參數(shù)校驗失敗時,會拋出 MethodArgumentNotValidException 異常。可以在全局異常處理器中捕獲該異常并進行統(tǒng)一處理。

/**
 * @author:江南一點雨
 * @site:http://www.javaboy.org
 * @微信公眾號:江南一點雨
 * @github:https://github.com/lenve
 * @gitee:https://gitee.com/lenve
 */
@RestControllerAdvice
public class GlobalException {
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public String handleValidationExceptions(MethodArgumentNotValidException ex) {
        // 獲取校驗結果的錯誤信息
        String message = ex.getBindingResult().getAllErrors().get(0).getDefaultMessage();
        return message;
    }
}

如此就大功告成了~是不是非常 Easy?

2.3 異常提示優(yōu)化

上面參數(shù)校驗注解中的異常提示都是在 Java 代碼里邊硬編碼的,我們也可以提前定義好異常提示文本,然后在代碼里引用即可,這樣更加方便,也好維護。

在 Spring Boot 項目中,可以通過在 messages.properties 文件中定義異常提示文本,并在代碼中通過 @Message 注解引用這些文本來實現(xiàn)國際化和自定義錯誤消息。

具體步驟是這樣的:

  1. 創(chuàng)建 messages.properties 文件:在 src/main/resources 目錄下創(chuàng)建一個 messages.properties 文件(對于不同語言版本,可以創(chuàng)建如 messages_en.properties、messages_fr.properties 等文件)。
  2. 定義異常提示文本:在 messages.properties 文件中定義鍵值對,鍵用于在代碼中引用,值是實際的錯誤消息。
NotEmpty.username=用戶名不能為空
NotBlank.password=密碼不能為空
Email.email=郵箱格式不正確
  1. 在實體類或 DTO 上使用校驗注解。
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.NotEmpty;

public class UserDto {
    @NotNull(message = "{NotEmpty.username}")
    private String username;
    
    @NotBlank(message = "{NotBlank.password}")
    private String password;
    
    @Email(message = "{Email.email}")
    private String email;

    // Getters and setters
}
  1. 配置國際化:如果你的應用需要支持多語言,可以在 application.properties 或 application.yml 中配置消息源。
spring.messages.basename=messages
spring.messages.encoding=UTF-8

這樣,當校驗失敗時,Spring 將自動從 messages.properties 文件中查找對應的錯誤消息,并將其返回給客戶端。這種方法不僅可以使錯誤消息更加靈活和可維護,還可以方便地實現(xiàn)國際化。

三 什么是分組校驗

為什么需要分組校驗呢?

假設我們有一個用戶實體 User,它包含用戶名、密碼和郵箱三個字段。在用戶注冊時,我們需要校驗用戶名和密碼非空,郵箱格式正確。但在用戶信息更新時,我們只需要校驗用戶名和郵箱,密碼可能不會被修改,因此不需要校驗。對于這種需求,我們可以使用分組校驗來實現(xiàn)這一需求。

松哥通過一個具體的案例來和小伙伴們演示下。

首先,我們定義兩個校驗分組,一個用于注冊,一個用于更新:

public interface RegisterGroup {}
public interface UpdateGroup {}

分組其實就是兩個空接口,用來做標記用。

然后,我們在 User 實體上應用這些分組:

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class User {
    @NotBlank(message = "用戶名不能為空", groups = {RegisterGroup.class, UpdateGroup.class})
    private String username;

    @NotBlank(message = "密碼不能為空", groups = RegisterGroup.class)
    private String password;

    @Email(message = "郵箱格式不正確", groups = {RegisterGroup.class, UpdateGroup.class})
    private String email;

    // Getters and setters
}

上面代碼中,username 和 email 即屬于注冊分組也屬于更新分組,而 password 則只屬于注冊分組。

接下來,在注冊接口中,我們使用 @Validated 注解并指定 RegisterGroup 分組:

/**
 * @author:江南一點雨
 * @site:http://www.javaboy.org
 * @微信公眾號:江南一點雨
 * @github:https://github.com/lenve
 * @gitee:https://gitee.com/lenve
 */
@RestController
public class UserController {
    @GetMapping("/hello")
    public String hello(@Validated UserDto userDto, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            // 處理校驗失敗情況
        }
        return "200";
    }

    @PostMapping("/register")
    public String register(@Validated(RegisterGroup.class) @RequestBody UserDto user) {
        // 注冊邏輯
        return "注冊成功";
    }

    @PostMapping("/update")
    public String update(@Validated(UpdateGroup.class) @RequestBody UserDto user) {
        // 更新邏輯
        return "更新成功";
    }
}

在這個例子中,當調用注冊接口時,User 對象會根據(jù) RegisterGroup 分組進行校驗,而調用更新接口時,則會根據(jù) UpdateGroup 分組進行校驗。這樣,我們就可以根據(jù)不同的業(yè)務需求來應用不同的校驗規(guī)則了。

分組校驗這種方式提供了一種靈活的方式來應對不同的校驗場景,使得我們的代碼更加清晰和易于維護。

責任編輯:武曉燕 來源: 江南一點雨
相關推薦

2014-03-25 10:09:46

2022-08-26 15:28:52

網(wǎng)絡安全黑客IT

2023-05-11 12:40:00

Spring控制器HTTP

2025-06-06 08:28:56

2013-05-15 09:31:17

2021-08-10 15:11:27

Spring Boot參數(shù)校驗

2021-08-12 10:32:50

Spring Boot參數(shù)校驗分組校驗

2025-03-13 10:14:44

2024-05-30 08:51:28

Spring數(shù)據(jù)分布式

2023-09-27 08:14:56

2022-06-04 12:25:10

解密加密過濾器

2021-03-09 13:18:53

加密解密參數(shù)

2024-06-13 08:41:41

2025-09-11 08:07:24

2021-12-28 11:13:05

安全認證 Spring Boot

2024-04-22 09:02:06

LicenseC#軟件開發(fā)RSA加密

2024-07-05 11:22:39

2025-07-04 04:22:00

數(shù)據(jù)安全零信任

2024-03-14 12:00:52

2022-01-26 07:01:00

開源社區(qū)項目
點贊
收藏

51CTO技術棧公眾號

国产高清成人久久| 欧美一级片免费观看| 国产盗摄一区二区三区在线| 九色精品蝌蚪| 亚洲一区二区三区激情| 国产在线一区二区三区欧美| 日韩欧美亚洲视频| 国产99久久| 欧美日韩成人在线| 日韩a级黄色片| 天堂av网在线| 国产亚洲一区在线| 中国china体内裑精亚洲片| 欧洲s码亚洲m码精品一区| 在线观看欧美一区二区| h片在线观看视频免费免费| 久久久91精品国产一区二区三区| 国产美女精彩久久| 亚洲欧美精品久久| 成人h动漫精品一区二区器材| 精品久久久免费| 亚洲不卡中文字幕| 波多野结衣电车| 亚洲二区三区不卡| 亚洲老司机av| 在线视频观看一区二区| f2c人成在线观看免费视频| 91日韩在线专区| 成人中文字幕+乱码+中文字幕| 欧美日韩中文视频| 成人免费看片39| 欧美一区二区在线免费播放| www.四虎成人| 视频在线这里都是精品| 国产女主播一区| av成人免费观看| 中文字幕第三页| 国产精品五区| 九色精品免费永久在线| 亚洲自拍偷拍图| 久久国产精品免费一区二区三区| 欧美日韩中文字幕| 屁屁影院ccyy国产第一页| seseavlu视频在线| 久久亚区不卡日本| 国产精品国产三级国产专区53| 中文字幕在线观看免费| 国产情侣一区| 欧美激情视频一区| 国产一区二区三区四区五区六区 | 中文字幕+乱码+中文字幕明步| 国产精品啊啊啊| 久久人人爽人人爽人人片亚洲| 国产精品成人99一区无码| 高清不卡一区| 欧美熟乱第一页| 日本在线观看a| 2024最新电影在线免费观看| 国产精品欧美久久久久一区二区| 欧美一卡2卡3卡4卡无卡免费观看水多多| www.av黄色| 蜜桃av噜噜一区| 国产999精品久久久影片官网| 国产五月天婷婷| 亚洲午夜久久久久久尤物| 中文字幕日韩在线视频| 欧日韩不卡视频| 色999日韩| 日韩综合中文字幕| 欧美手机在线观看| 91精品啪在线观看国产81旧版| 在线观看欧美www| 人人人妻人人澡人人爽欧美一区| 要久久爱电视剧全集完整观看| 欧美成人在线直播| av影片在线播放| 91久久偷偷做嫩草影院电| 精品乱码亚洲一区二区不卡| 午夜免费福利网站| 粉嫩av国产一区二区三区| 91麻豆精品国产自产在线| 亚洲图片 自拍偷拍| 久久久国产精品入口麻豆| 欧美午夜精品久久久| 国产又大又黄又猛| 亚洲精品乱码日韩| 日韩一区二区三区av| 天美一区二区三区| 亚洲精品黑牛一区二区三区| 亚洲а∨天堂久久精品9966| 亚洲天堂网一区二区| 国产成人澳门| 亚洲欧美精品在线| 日本成人精品视频| 欧美91视频| 久久久久久久久久久网站| 国产精品一区二区6| 久久成人免费| 91精品国产综合久久久久久久久| 99在线观看免费| proumb性欧美在线观看| 欧美18视频| 欧美96在线| 亚洲一级在线观看| 成年人免费在线播放| 亚洲日韩中文字幕一区| 欧美一区二区三区色| 国产麻豆剧传媒精品国产av| 精品久久久久中文字幕小说| 欧美精品一二区| 欧美日韩乱国产| 国模大尺度一区二区三区| 成人欧美视频在线| 狠狠狠综合7777久夜色撩人| 亚洲人一二三区| 成年人视频网站免费观看| 91国产精品| 日韩电影中文字幕av| 国产在线免费看| 亚洲一区二区网站| 成人免费福利在线| 日韩福利一区二区| 亚洲精品欧美激情| av五月天在线| 视频国产精品| 在线亚洲男人天堂| 波多野结衣国产| 国产乱子轮精品视频| 日本一区二区不卡高清更新| 国产美女一区视频| 欧美日韩在线免费视频| bl动漫在线观看| 天天超碰亚洲| 国产精品视频内| 青青草视频在线观看| 亚洲欧洲www| 国产xxxxx视频| 黄色成人美女网站| 久久视频免费在线播放| 加勒比在线一区| 91麻豆产精品久久久久久| 激情六月天婷婷| 成人国产精品一区二区网站| 一区三区二区视频| 天堂а√在线中文在线新版 | 亚洲乱码国产乱码精品精可以看| 人妻精品无码一区二区三区 | 亚洲精品免费在线| 亚洲天堂网一区| 欧美激情99| 久久久久久久久网站| 亚洲精品无码专区| 国产精品久线观看视频| 国产精品免费成人| 免费成人av| 久久久人成影片一区二区三区观看 | 玖玖精品一区| 俺也去精品视频在线观看| 中文字幕+乱码+中文| 日本一区二区三区在线观看| 最近免费中文字幕中文高清百度| 日韩高清一级| 久久人91精品久久久久久不卡| 国 产 黄 色 大 片| 一区二区三区欧美在线观看| 初高中福利视频网站| 亚洲视频电影在线| 亚洲影院色无极综合| a黄色片在线观看| 91精品午夜视频| 清纯粉嫩极品夜夜嗨av| 国产精品一卡二卡| 日韩 欧美 视频| 久久久久观看| 欧美最猛性xxxxx(亚洲精品)| 欧美色视频免费| 91极品美女在线| 欧美a在线播放| 日本不卡中文字幕| 影音先锋在线亚洲| 欧洲一区在线| 久久久久99精品久久久久| 99精品久久久久久中文字幕| 亚洲一线二线三线视频| 国产伦精品一区二区三区88av| 亚洲国产精品一区| 免费av一区二区三区| 日韩欧美一区二区三区免费观看| 一级做a爰片久久毛片美女图片| 中文字幕在线观看国产| 亚洲免费高清视频在线| 色诱av手机版| 免费日韩av| 欧美亚洲另类在线一区二区三区| 国产精品99| 九色精品免费永久在线| 午夜国产在线视频| 在线观看亚洲专区| 手机在线免费看毛片| 成人黄页在线观看| 亚洲精品一二三四五区| 一区二区在线| 麻豆av一区二区| 欧美日韩女优| 欧美精品videos另类日本| 欧美熟妇另类久久久久久不卡| 色婷婷久久综合| 午夜精品福利在线视频| 91在线国内视频| 天天影视色综合| 国产精品社区| 福利网在线观看| 欧美aaaaaaaa牛牛影院| 国产日韩中文在线| 超碰成人av| 日韩一中文字幕| 色一情一乱一区二区三区| 欧美视频你懂的| 亚洲欧美偷拍视频| 亚洲国产成人91porn| 午夜国产福利一区二区| 国产精品日日摸夜夜摸av| 亚洲乱码国产乱码精品精大量| 国产91色综合久久免费分享| 又色又爽又黄视频| 日本成人在线视频网站| 国产xxxxx在线观看| 99热免费精品| 国产二区视频在线| 欧美激情成人在线| 超碰在线免费观看97| 天天做天天爱天天综合网2021| 欧美一区二区三区在线播放| 欧美交a欧美精品喷水| 91福利视频导航| 白嫩亚洲一区二区三区| 国产精品视频自在线| h1515四虎成人| 国产精品欧美亚洲777777| 粉嫩一区二区三区| 日韩av免费网站| 经典三级一区二区| 国产成人在线一区二区| 欧美xnxx| 国产欧美韩国高清| 日韩成人在线电影| 成人av电影天堂| 日韩免费高清视频网站| 亚洲一区免费网站| 狂野欧美xxxx韩国少妇| 亚洲一区亚洲二区亚洲三区| 亚洲精品v亚洲精品v日韩精品| 5566av亚洲| 韩国精品福利一区二区三区| 国产九色精品| 亚洲欧洲美洲国产香蕉| 欧美日韩三区四区| 精品av一区二区| 亚洲巨乳在线观看| 91久久高清国语自产拍| 男人添女人下部视频免费| 激情综合久久| 116极品美女午夜一级| 日韩有码一区二区三区| 五月激情婷婷在线| 国产99精品在线观看| 老鸭窝一区二区| 欧美激情资源网| 可以直接看的黄色网址| 午夜久久久久久| 9i精品福利一区二区三区| 欧美日本一区二区三区| 亚洲AV无码一区二区三区性| 国产婷婷色综合av蜜臀av| 91xxx在线观看| 欧美黑人又粗大| a日韩av网址| 91免费高清视频| 精品国产一区二区三区不卡蜜臂| 欧美一区二区三区成人久久片 | 免费人成自慰网站| 久久亚洲欧美| 人妻激情偷乱视频一区二区三区| 99久久久精品| 伊人久久久久久久久久久久久久| 夜夜精品视频一区二区| 免费看污视频的网站| 制服丝袜国产精品| 深夜福利在线看| 久久精品电影网站| 天堂а√在线最新版中文在线| 国产欧美韩国高清| 任你弄精品视频免费观看| 一区二区三区四区欧美| aⅴ色国产欧美| 91网址在线观看精品| 97久久精品人人做人人爽| 亚洲人做受高潮| 欧美午夜电影在线| 亚洲av综合色区无码一二三区| 亚洲欧美日韩一区在线| 国产高清在线a视频大全| 国产精品视频xxx| 青青一区二区| 激情六月天婷婷| 久久成人久久鬼色| 国产真人做爰视频免费| 亚洲午夜免费福利视频| 国产精品日韩无码| 国产一区二区黄| 超碰在线中文字幕| 成人欧美一区二区三区在线湿哒哒| 免费视频一区三区| 久久亚洲中文字幕无码| 国产高清不卡二三区| 波多野结衣家庭教师在线观看| 欧美日韩中文字幕综合视频| 亚洲精品一区二区三区不卡| 欧美成人在线网站| 看片一区二区| 五月天婷亚洲天综合网鲁鲁鲁| 国产日本精品| 久久人人爽人人人人片| 亚洲国产毛片aaaaa无费看| 91在线视频国产| 日韩亚洲在线观看| 99riav视频一区二区| 欧美激情第一页在线观看| aa国产精品| 中文字幕在线免费看线人| 亚洲二区在线视频| 亚洲女同志亚洲女同女播放| 九九热精品视频| 精品伊人久久| 黄色片免费在线观看视频| 国产精品一区二区免费不卡 | 欧美日本二区| 中文字幕在线观看视频www| 亚洲欧美一区二区三区国产精品| 亚洲综合精品视频| 视频在线观看99| 亚洲日本免费电影| 黄色一级片网址| 国产精品一区二区你懂的| 久草成人在线视频| 精品国产成人系列| 91破解版在线观看| 极品尤物一区二区三区| 午夜在线a亚洲v天堂网2018| 久久精品国产亚洲av麻豆| 91成人免费在线视频| 成年人在线观看网站| 国产ts一区二区| 精品国产中文字幕第一页 | 国产精品一品| 97久久夜色精品国产九色 | 久久久久久久网| 亚洲中文一区二区| 亚洲乱码国产乱码精品精天堂| 欧美日韩国产网站| 婷婷精品国产一区二区三区日韩| 蜜臀va亚洲va欧美va天堂| 国产无遮挡在线观看| 日韩一区国产二区欧美三区| 日本不卡在线| 国产精品色视频| 中文视频一区| 蜜臀aⅴ国产精品久久久国产老师| 午夜久久久影院| 你懂的在线观看视频网站| 国产精品一区=区| 亚洲第一天堂| 亚洲av网址在线| 色婷婷av久久久久久久| 色的视频在线免费看| 亚洲已满18点击进入在线看片| 久久久久久影院| 制服丝袜第一页在线观看| 欧美丝袜第一区| 搞黄网站在线观看| 国产高清精品一区二区三区| 日韩国产欧美三级| 女同久久另类69精品国产 | 青青视频在线观| 国产精品一香蕉国产线看观看| 狠色狠色综合久久| 爱爱的免费视频| 欧美一区二区三区四区视频| 69av成人| 最新av在线免费观看| 成人精品鲁一区一区二区| 这里只有精品免费视频| 美女999久久久精品视频| 免费欧美一区| av在线网站免费观看| 自拍偷拍亚洲欧美日韩| 手机福利小视频在线播放| 国产日本欧美在线观看 | 国产精品狼人久久影院观看方式| 99久久精品免费看国产交换|