在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Spring Boot應用中如何做好參數校驗?

jf_78858299 ? 來源:JAVA旭陽 ? 作者:JAVA旭陽 ? 2023-05-11 10:52 ? 次閱讀

前言

參數驗證很重要,是平時開發環節中不可少的一部分,但是我想很多后端同事會偷懶,干脆不錯,這樣很可能給系統的穩定性和安全性帶來嚴重的危害。那么在Spring Boot應用中如何做好參數校驗工作呢,本文提供了10個小技巧,你知道幾個呢?

1.使用驗證注解

Spring Boot提供了內置的驗證注解,可以幫助簡單、快速地對輸入字段進行驗證,例如檢查 null 或空字段、強制執行長度限制、使用正則表達式驗證模式以及驗證電子郵件地址。

一些最常用的驗證注釋包括:

  • @NotNull:指定字段不能為空。
  • @NotEmpty:指定列表字段不能為空。
  • @NotBlank:指定字符串字段不得為空或僅包含空格。
  • @Min@Max:指定數字字段的最小值和最大值。
  • @Pattern:指定字符串字段必須匹配的正則表達式模式。
  • @Email:指定字符串字段必須是有效的電子郵件地址。

具體用法參考下面例子:

public class User {
    @NotNull
    private Long id;

    @NotBlank
    @Size(min = 2, max = 50)
    private String firstName;

    @NotBlank
    @Size(min = 2, max = 50)
    private String lastName;

    @Email
    private String email;

    @NotNull
    @Min(18)
    @Max(99)
    private Integer age;

    @NotEmpty
    private List

2 使用自定義驗證注解

雖然 Spring Boot 的內置驗證注釋很有用,但它們可能無法涵蓋所有情況。如果有特殊參數驗證的場景,可以使用 Spring 的 JSR 303 驗證框架創建自定義驗證注釋。自定義注解可以讓你的的驗證邏輯更具可重用性和可維護性。

假設我們有一個應用程序,用戶可以在其中創建帖子。每個帖子都應該有一個標題和一個正文,并且標題在所有帖子中應該是唯一的。雖然 Spring Boot 提供了用于檢查字段是否為空的內置驗證注釋,但它沒有提供用于檢查唯一性的內置驗證注釋。在這種情況下,我們可以創建一個自定義驗證注解來處理這種情況。

首先,我們創建自定義約束注解UniqueTitle

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = UniqueTitleValidator.class)
public @interface UniqueTitle {
    String message() default "Title must be unique";

    Class?[] groups() default {};

    Class? extends Payload[] payload() default {};
}

接下來,我們創建一個PostRepository接口,目的是從數據庫中檢索帖子:

public interface PostRepository extends JpaRepository<Post, Long> {
    Post findByTitle(String title);
}

然后我們需要定義驗證器類 UniqueTitleValidator,如下所示:

@Component
public class UniqueTitleValidator implements ConstraintValidator<UniqueTitle, String> {

    @Autowired
    private PostRepository postRepository;

    @Override
    public boolean isValid(String title, ConstraintValidatorContext context) {
        if (title == null) {
            return true;
        }
        return Objects.isNull(postRepository.findByTitle(title));
    }
}

UniqueTitleValidator實現了ConstraintValidator接口,它有兩個泛型類型:第一個是自定義注解UniqueTitle,第二個是正在驗證的字段類型(在本例中為String). 我們還自動裝配了PostRepository 類以從數據庫中檢索帖子。

isValid()方法通過查詢 PostRepository 來檢查 title 是否為 null 或者它是否是唯一的。如果 title 為 null 或唯一,則驗證成功,并返回 true。

定義了自定義驗證注釋和驗證器類后,我們現在可以使用它來驗證 Spring Boot 應用程序中的帖子標題:

public class Post {
    @UniqueTitle
    private String title;

    @NotNull
    private String body;
}

我們已將 @UniqueTitle 注釋應用于 Post 類中的 title 變量。驗證此字段時,這將觸發 UniqueTitleValidator 類中定義的驗證邏輯。

3 在服務器端驗證

除了前端或者客戶端做了驗證意外,服務器端驗證輸入是至關重要的。它可以確保在處理或存儲任何惡意或格式錯誤的數據之前將其捕獲,這對于應用程序的安全性和穩定性至關重要。

假設我們有一個允許用戶創建新帳戶的 REST 端點。端點需要一個包含用戶用戶名和密碼的 JSON 請求體。為確保輸入有效,我們可以創建一個 DTO(數據傳輸對象)類并將驗證注釋應用于其字段:

public class UserDTO {

    @NotBlank
    private String username;

    @NotBlank
    private String password;
}

我們使用@NotBlank注解來確保usernamepassword字段不為空或 null。

接下來,我們可以創建一個控制器方法來處理 HTTP POST 請求并在創建新用戶之前驗證輸入:

@RestController
@RequestMapping("/users")
@Validated
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping
    public ResponseEntity

我們使用 Spring 的@Validated注解來啟用方法級驗證,我們還將 @Valid 注釋應用于 userDto 參數以觸發驗證過程。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 參數
    +關注

    關注

    11

    文章

    1846

    瀏覽量

    32328
  • 校驗
    +關注

    關注

    0

    文章

    41

    瀏覽量

    12663
  • spring
    +關注

    關注

    0

    文章

    340

    瀏覽量

    14362
  • Boot
    +關注

    關注

    0

    文章

    150

    瀏覽量

    35863
收藏 人收藏

    評論

    相關推薦

    Spring bootRedis的使用

    【本人禿頂程序員】springboot專輯:Spring bootRedis的使用
    發表于 03-27 11:42

    Spring Boot嵌入式Web容器原理是什么

    Spring Boot嵌入式Web容器原理Spring Boot的目標是構建“非常容易創建、獨立、產品級別的基于Spring的應用”。這些應
    發表于 12-16 07:57

    Spring Boot從零入門1 詳述

    在開始學習Spring Boot之前,我之前從未接觸過Spring相關的項目,Java基礎還是幾年前自學的,現在估計也忘得差不多了吧,寫Spring
    的頭像 發表于 12-10 22:18 ?655次閱讀

    Spring Boot實現各種參數校驗

    之前也寫過一篇關于Spring Validation使用的文章,不過自我感覺還是浮于表面,本次打算徹底搞懂Spring Validation。本文會詳細介紹Spring Validation各種場景下的最佳實踐及其實現原理,死磕
    的頭像 發表于 08-14 15:54 ?992次閱讀

    Spring Boot特有的實踐

    Spring Boot是最流行的用于開發微服務的Java框架。在本文中,我將與你分享自2016年以來我在專業開發中使用Spring Boot所采用的最佳實踐。這些內容是基于我的個人經驗
    的頭像 發表于 09-29 10:24 ?927次閱讀

    強大的Spring Boot 3.0要來了

    和 Bugfix。 Spring Boot 3.0 的開發工作始于實驗性的 Spring Native,旨在為 GraalVM 原生鏡像提供支持。 在該版本,開發者現在可以使用標準
    的頭像 發表于 10-31 11:17 ?1918次閱讀

    Spring Boot Web相關的基礎知識

    Boot的第一個接口。接下來將會將會介紹使用Spring Boot開發Web應用的相關內容,其主要包括使用spring-boot-starter-web組件來實現Web應用開發、UR
    的頭像 發表于 03-17 15:03 ?674次閱讀

    簡述Spring Boot數據校驗

    上一篇文章我們了解了Spring Boot Web相關的知識,初步了解了spring-boot-starter-web,還了解了@Contrler和@RestController的差別,如果
    的頭像 發表于 03-17 15:07 ?803次閱讀

    SpringBoot參數驗證的10個技巧1

    參數驗證很重要,是平時開發環節不可少的一部分,但是我想很多后端同事會偷懶,干脆不錯,這樣很可能給系統的穩定性和安全性帶來嚴重的危害。那么在Spring Boot應用
    的頭像 發表于 04-07 15:10 ?586次閱讀

    Spring Boot如何使用定時任務

    本文介紹在 Spring Boot 如何使用定時任務,使用非常簡單,就不做過多說明了。
    的頭像 發表于 04-12 10:56 ?992次閱讀

    Spring Boot應用如何做好參數校驗?2

    參數驗證很重要,是平時開發環節不可少的一部分,但是我想很多后端同事會偷懶,干脆不錯,這樣很可能給系統的穩定性和安全性帶來嚴重的危害。那么在Spring Boot應用
    的頭像 發表于 05-11 10:56 ?523次閱讀

    Spring Boot Actuator快速入門

    不知道大家在寫 Spring Boot 項目的過程,使用過 Spring Boot Actuator 嗎?知道
    的頭像 發表于 10-09 17:11 ?659次閱讀

    Spring Boot啟動 Eureka流程

    在上篇已經說過了 Eureka-Server 本質上是一個 web 應用的項目,今天就來看看 Spring Boot 是怎么啟動 Eureka 的。 Spring
    的頭像 發表于 10-10 11:40 ?905次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>啟動 Eureka流程

    Spring Boot的啟動原理

    可能很多初學者會比較困惑,Spring Boot如何做到將應用代碼和所有的依賴打包成一個獨立的 Jar 包,因為傳統的 Java 項目打包成 Jar 包之后,需要通過 -classpath 屬性
    的頭像 發表于 10-13 11:44 ?671次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>的啟動原理

    Spring Boot 的設計目標

    什么是Spring Boot Spring BootSpring 開源組織下的一個子項目,也是 S
    的頭像 發表于 10-13 14:56 ?596次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的設計目標
    主站蜘蛛池模板: 日本免费一区视频| 久久思re热9一区二区三区| 天堂8资源8在线| 日本久草网| 久久精品午夜| 色天使亚洲| 性爽爽| 天堂网www在线观看| 日本高清视频不卡| 美女视频一区二区| 亚洲香蕉国产高清在线播放| 亚洲黄色性视频| 不卡视频一区二区三区| 优优国产在线视频| 色综合久久久久久久久五月| 欧美线人一区二区三区| 精品一区二区视频| a爱视频| 理论在线看| 欧美ccc| 1024毛片基地| 嗯好舒服好爽好快好大| 亚洲www美色| 伊人亚洲| 亚洲人成网站色7777| 老师下面很湿很爽很紧 | 国产裸露片段精华合集链接| www.999精品视频观看免费| 国产一级淫| 五月天婷婷综合网| 波多野结衣的毛片| 在线观看视频在线观看| 糖心vlog麻豆精东影业传媒| 性 色 黄 一级| 久久久五月| 国产一区美女| 天天做天天爱天天爽天天综合 | 成年网站在线看| 久久www成人看片| 欧美区亚洲区| 欧美无遮挡国产欧美另类|