在线观看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

    文章

    1867

    瀏覽量

    32874
  • 校驗
    +關注

    關注

    0

    文章

    42

    瀏覽量

    12799
  • spring
    +關注

    關注

    0

    文章

    340

    瀏覽量

    14891
  • Boot
    +關注

    關注

    0

    文章

    153

    瀏覽量

    36566
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    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 ?822次閱讀

    Spring Boot實現各種參數校驗

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

    Spring Boot特有的實踐

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

    強大的Spring Boot 3.0要來了

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

    Spring Boot Web相關的基礎知識

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

    簡述Spring Boot數據校驗

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

    SpringBoot參數驗證的10個技巧1

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

    Spring Boot如何使用定時任務

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

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

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

    Spring Boot Actuator快速入門

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

    Spring Boot啟動 Eureka流程

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

    Spring Boot 的設計目標

    什么是Spring Boot Spring BootSpring 開源組織下的一個子項目,也是 S
    的頭像 發表于 10-13 14:56 ?768次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的設計目標
    主站蜘蛛池模板: 公妇乱淫日本免费观看 | 视频免费观看视频 | 色激情综合网 | 久久久久久久国产精品影院 | 午夜精品视频 | a毛片成人免费全部播放 | 午夜一级免费视频 | 午夜一级福利 | 深夜免费视频 | 国产午夜精品理论片 | 一级片影院 | 色综合天天综合网国产成人 | 精品免费视在线观看 | 一级毛片一级毛片一级毛片aa | 二区三区视频 | 四虎影院精品在线观看 | 天天操天天曰 | 色成人亚洲 | 国产成人一区二区三中文 | 五月天天色 | 狠狠狠狠操 | 成人午夜影院在线观看 | 1024国产高清精品推荐 | 特黄特色的视频免费播放 | 亚洲免费色图 | 亚洲成人综合在线 | 亚洲成人黄色 | 午夜剧场刺激性爽免费视频 | 窝窝视频成人影院午夜在线 | 久久精品国产亚洲片 | 69hdxxxx日本| 久青草国产免费观看 | 九九热免费在线观看 | 亚洲一区二区三区深夜天堂 | 成人爽a毛片在线视频 | 福利视频免费观看 | 六月激情婷婷 | 亚洲视频一区二区 | 欧美色淫 | 久久天天躁狠狠躁夜夜不卡 | 四虎影视精品 |