精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产www精品| 亚洲第一视频在线观看| 一本一道久久a久久综合精品| 最近中文字幕在线视频| 亚洲高清资源在线观看| 亚洲精品在线三区| 黄色国产小视频| 丝袜中文在线| 国产午夜精品一区二区三区视频 | 日本一区二区电影| 亚洲精品成a人| 日韩高清av电影| www.黄色小说.com| 日韩中文字幕麻豆| 欧美激情一级二级| 一级黄色录像毛片| 国产精品对白| 在线播放国产精品二区一二区四区| 性一交一乱一伧国产女士spa| 国产女人在线观看| 成人动漫中文字幕| 91亚洲va在线va天堂va国| 国产精品suv一区二区三区| 国产精品久久久久久久久妇女| 亚洲电影在线观看| 久久人人爽人人片| 久久99国产精品二区高清软件| 午夜精品福利一区二区三区蜜桃| 中文字幕色一区二区| 理论视频在线| 91碰在线视频| 国产欧美日韩一区| 北条麻妃一二三区| 紧缚捆绑精品一区二区| 国产精品久久久久久网站 | 一级特黄录像免费播放全99| 999福利视频| 日韩精品免费一区二区三区竹菊| 日韩三级.com| www激情五月| 欧洲亚洲精品久久久久| 欧美亚洲自拍偷拍| 欧美婷婷精品激情| avav成人| 91久久久免费一区二区| 国产3p露脸普通话对白| www.51av欧美视频| 亚洲第一成年网| 野外做受又硬又粗又大视频√| 在线免费av导航| 亚洲精品视频在线观看免费| 色一情一乱一乱一区91| 四虎亚洲精品| 亚洲成年人网站在线观看| 免费人成自慰网站| 国产不卡123| 激情成人中文字幕| 北条麻妃在线一区| 成人看片网站| 欧美日产在线观看| 国产美女视频免费看| 免费在线观看一区二区| 在线能看的av| 国产精品一卡| 浅井舞香一区二区| 一级特黄免费视频| 精品亚洲免费视频| 亚洲最大的免费| 亚洲欧美黄色片| 成人sese在线| 欧美在线播放一区| 色综合久久影院| 亚洲男人天堂av网| 日韩人妻无码精品久久久不卡| 欧美xxxx黑人又粗又长| 大伊人狠狠躁夜夜躁av一区| 日本女优爱爱视频| 日韩欧美专区| 精品国产1区2区3区| 中文字幕5566| 欧美高清在线| 高清一区二区三区日本久| 精品国产午夜福利| 久久99精品国产| 国产精品亚洲不卡a| 国产毛片在线| 亚洲精品久久久蜜桃| 国产成人黄色片| 日韩成人在线一区| 亚洲国产一区二区三区在线观看| 无码 人妻 在线 视频| 久久精品亚洲人成影院| 97久久久久久| 国产乱淫av片免费| 91女神在线视频| 懂色av一区二区三区四区五区| 8x8ⅹ拨牐拨牐拨牐在线观看| 欧美在线不卡视频| 麻豆短视频在线观看| 国产a久久精品一区二区三区| 久久精品小视频| 亚洲婷婷综合网| 国产精品系列在线播放| 日韩欧美电影一区二区| 欧美草逼视频| 欧美人动与zoxxxx乱| 国产伦精品一区二区三区妓女 | 日本少妇全体裸体洗澡| 日韩不卡在线观看日韩不卡视频| 高清国产一区| 无遮挡动作视频在线观看免费入口| 亚洲一区二区三区小说| 久久撸在线视频| 色婷婷av一区二区三区丝袜美腿| 久久精品久久精品亚洲人| 精品人妻一区二区色欲产成人| 黄色日韩网站视频| 日本一区二区久久精品| 大桥未久在线视频| 欧美成人官网二区| 亚洲 欧美 变态 另类 综合| 免费一区视频| 国产欧美日韩在线播放| 日本一本在线免费福利| 欧美美女视频在线观看| 国精产品一区二区三区| 国产精品久久久久毛片大屁完整版| 亚洲aⅴ男人的天堂在线观看| 国产在线中文字幕| 欧美午夜影院在线视频| 日韩少妇一区二区| 国产精品videosex极品| 91久久综合亚洲鲁鲁五月天| 欧美成人三区| 欧美欧美午夜aⅴ在线观看| 国产毛片久久久久久久| 一本综合久久| 国产亚洲欧美一区二区三区| 欧美日韩经典丝袜| 日韩欧美电影一区| 欧美xxxx黑人xyx性爽| 狠狠色丁香九九婷婷综合五月| 亚洲乱码一区二区三区| 国产精品蜜月aⅴ在线| 亚洲一区二区久久久| 亚洲s码欧洲m码国产av| 久久久久久电影| 亚洲精品乱码久久久久久自慰| 亚洲第一论坛sis| 日本91av在线播放| 黄色小视频在线免费观看| 一本到不卡免费一区二区| 国产精品jizz| 日本美女一区二区三区视频| 亚洲国产日韩欧美| 国产精品一区二区三区av| 欧美成人免费大片| 亚洲欧美另类综合| 亚洲成a人v欧美综合天堂下载| 亚洲婷婷在线观看| 久久久777| 亚洲精美视频| 久久在线观看| 韩国国内大量揄拍精品视频| 婷婷开心激情网| 色综合一区二区| 美国精品一区二区| 国产成人精品1024| 欧美黄网站在线观看| 日产午夜精品一线二线三线| 成人黄色生活片| 日本高清成人vr专区| 亚洲国产古装精品网站| 中文精品久久久久人妻不卡| 中文字幕亚洲视频| 亚洲欧美综合视频| 午夜在线视频一区二区区别| 视频一区二区三区在线观看 | 国产伦精品一区二区三区在线| 婷婷电影在线观看| 日韩有码在线视频| 黄色片一区二区三区| 色综合久久久久久久久久久| 情侣偷拍对白清晰饥渴难耐| 成人免费观看av| 最近中文字幕一区二区| 欧美激情日韩| 日韩av影视| 中文在线免费一区三区| 日本午夜在线亚洲.国产| av在线免费网站| 亚洲日本中文字幕| a级片在线视频| 色综合天天综合在线视频| 日韩三级在线观看视频| 久久一区二区三区四区| 第一区免费在线观看| 99综合视频| 伊人再见免费在线观看高清版 | 国产午夜精品久久久| 91成品人影院| 高潮白浆女日韩av免费看| 少妇太紧太爽又黄又硬又爽小说 | 天堂av中文在线| 亚洲人成绝费网站色www| 国产哺乳奶水91在线播放| 色噜噜偷拍精品综合在线| 免费在线黄色片| 国产精品家庭影院| 久久亚洲AV成人无码国产野外| 国产高清亚洲一区| 97超碰成人在线| 久久精品动漫| 国产在线播放观看| 欧美一区视频| 中日韩在线视频| 嫩草影视亚洲| 精品久久精品久久| julia中文字幕一区二区99在线| 国产一区视频在线| 日韩av首页| 欧洲成人免费视频| 成人爽a毛片免费啪啪动漫| 久久精品成人欧美大片| av资源种子在线观看| 亚洲毛片在线免费观看| 少妇人妻偷人精品一区二区| 日韩欧美激情四射| 国产女人18毛片水真多| 欧美日韩一区视频| 最新中文字幕在线观看视频| 精品久久久久久亚洲国产300| 久久艹精品视频| 一个色综合av| 劲爆欧美第一页| 亚洲免费观看高清完整版在线观看 | 成人毛片在线观看| 亚洲欧美激情一区二区三区| 国产尤物一区二区| 99re精彩视频| 久久爱www久久做| 亚洲综合av在线播放| 蜜桃视频一区二区三区在线观看 | 国产在线日韩欧美| 第一区免费在线观看| 六月丁香综合在线视频| 永久免费的av网站| 精品一区二区三区在线观看| 午夜天堂在线视频| 国产成人精品一区二区三区四区 | 国产日韩欧美综合一区| 在线观看日本中文字幕| 国产三级精品视频| 亚洲图片第一页| 亚洲色图.com| 免费在线看黄网址| 精品久久久中文| 中文字幕一区二区人妻电影| 欧美午夜电影网| 影音先锋国产资源| 91精品国产综合久久福利| 99在线观看免费| 亚洲第一区中文字幕| 黄色av网址在线免费观看| 中文字幕亚洲一区二区三区| 男人的天堂在线视频免费观看 | 国产亚洲精品成人| 天天色综合成人网| 欧美 亚洲 另类 激情 另类| 欧美欧美欧美欧美| 欧美视频在线观看一区二区三区| 日韩精品视频在线免费观看| 国产人成在线观看| 久久五月天色综合| 麻豆蜜桃在线观看| 国产精品亚发布| 91精品短视频| 欧洲av一区| 欧美成人日本| 国内外成人激情视频| 美国一区二区三区在线播放| 1314成人网| 91在线云播放| 三级黄色在线观看| 欧美日韩免费在线| 国产又粗又黄又爽视频| 亚洲国产精品免费| 日韩毛片久久久| 97久久久久久| 99亚洲男女激情在线观看| 国产一区自拍视频| 99久久视频| 啊啊啊一区二区| 韩国av一区二区| 精品夜夜澡人妻无码av| 亚洲欧美国产高清| 欧美男人天堂网| 欧美mv和日韩mv国产网站| 国产三级视频在线| 久久久久久av| 全球中文成人在线| 免费成人看片网址| 国模一区二区三区| 亚洲高清免费在线观看| 成人av网在线| 欧美激情图片小说| 91久久精品一区二区| 黄色av小说在线观看| 久久香蕉国产线看观看av| 午夜精品久久久久久久久久蜜桃| 成人黄视频免费| 日韩一区电影| 成年网站在线免费观看| 成人午夜免费av| 亚洲综合久久av一区二区三区| 日韩欧美在线视频日韩欧美在线视频 | b站大片免费直播| 亚洲成人av电影在线| 国产欧美日韩综合精品一区二区三区| 国产亚洲精品成人av久久ww| 多野结衣av一区| 成人av资源网| 欧美久久久久| 在线观看免费视频污| 国产精品乱人伦| 中文字幕一区2区3区| 亚洲人在线观看| 亚洲成人看片| 美日韩精品免费| 国产精品综合| avtt香蕉久久| 图片区小说区区亚洲影院| 成人午夜福利视频| 欧美激情在线观看| 亚洲一区二区三区日本久久九| 一区二区不卡在线观看| 美女任你摸久久| 91禁男男在线观看| 欧美日韩国产色站一区二区三区| www在线播放| 国产精品一区二区三区成人| 色爱综合网欧美| 污污视频网站在线| 亚洲老妇xxxxxx| 国产丰满美女做爰| 欧美激情在线视频二区| 99re6热只有精品免费观看| 成人短视频在线观看免费| 国产不卡高清在线观看视频| 青娱乐国产盛宴| 精品日产卡一卡二卡麻豆| av在线理伦电影| 久久一区二区三区av| 日精品一区二区| 人妻无码一区二区三区免费| 3d成人h动漫网站入口| 羞羞视频在线免费国产| 国产精品久久7| 亚洲欧美视频| 中文字幕有码在线播放| 欧美久久高跟鞋激| 精灵使的剑舞无删减版在线观看| 国产亚洲情侣一区二区无| 老司机亚洲精品| 永久免费看片视频教学| 亚洲精品一区二区三区香蕉 | 欧美精品97| 特级西西人体4444xxxx| 日本韩国欧美一区二区三区| 2017亚洲天堂1024| 99久久免费国| 老司机精品久久| 熟女少妇a性色生活片毛片| 欧美成人午夜电影| 久久久久久久| 91免费视频黄| 99r国产精品| 一级黄色大片网站| 欧美激情精品久久久久久黑人| 蜜臀91精品国产高清在线观看| 日韩在线不卡一区| 婷婷开心激情综合| 在线观看av的网站| 国产精品污www一区二区三区| 日日夜夜免费精品视频| 国产大学生自拍| 国产视频久久久| 国产一区二区三区免费观看在线 | 在线观看亚洲视频啊啊啊啊| 国产成人自拍网| 9i精品福利一区二区三区| 久久综合亚洲社区| 亚洲黄页网站| 黑人巨大猛交丰满少妇| 色综合一个色综合亚洲| 手机电影在线观看| 亚洲精品在线观看免费| av激情亚洲男人天堂| 国产精品国产三级国产普通话对白| 午夜欧美不卡精品aaaaa|