iT邦幫忙

2023 iThome 鐵人賽

DAY 20
0

Yes

在前幾天的文章中探討了 Spring Data JPA 持久化操作、主要架構、Entity 等的內容,以及如何利用資料庫操作和查詢來優化應用程式。無疑,正確又高效的存取資料確實是任何系統的核心基礎,然而,在持久化資料到資料庫前,有個同樣重要的環節需要放大探討 —— 那就是「資料驗證」。

資料驗證(Validation)是要確保正在處理、儲存中的資料具有預期格式的過程,可以通過一系列的規範或標準(例如格式、大小、數值範圍等)來檢查是否符合預期。不論是從用戶端接收的輸入 request,還是系統內部的資料交換,一個嚴格精確的驗證機制都是不可或缺的。

Validation 不僅能保護應用程式免於無效、錯誤的資料,更進一步還能確保這些資料做出的業務邏輯和操作穩固可靠。在Spring Boot 中,Validation 可以輕易的實現,接下來的文章中會探討資料驗證機制,從基礎的驗證註解到進階的自定義驗證邏輯。

範例

假設我們正在開發一個註冊的功能,在使用者註冊過程中,需要收集並驗證用戶提供的一些基本資料,如姓名、電子郵件和密碼。每個屬性都有其驗證要求:

  • 名字不能為空,並且至少兩個字元;
  • 信箱必須是有效的電子郵件格式;
  • 密碼必須達到一定的長度和強度,至少應該有八碼。

程式碼

在 Spring Boot 中,我們可以使用 @Valid 註解和 Java 的 JSR 380 規範來完成這些需求。

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

public class UserRegistrationDto {

    @NotBlank(message = "姓名不得空白")
    @Size(min = 2, message = "姓名至少為兩個字")
    private String name;

    @Email(message = "Email should be valid")
    @NotBlank
    private String email;

    @Size(min = 8, message = "密碼至少應該有八碼")
    private String password;

    // 省略 getters 和 setters...
}

在 Controller 使用 @Valid 來觸發驗證,如果驗證失敗,回傳 400 Bad Request 的 HTTP status code 以及錯誤訊息。

import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;

@Validated
public class RegistrationController {

    @PostMapping("/register")
    public String registerUser(@Valid UserRegistrationDto userRegistrationDto) {
        // ...
    }
}

以上程式碼目的是在確保輸入之資料在進入業務邏輯處理前就符合要求,否則會回傳驗證錯誤。


上一篇
Day 19 - Many-to-Many
下一篇
Day 21 - Validation Group
系列文
Spring Boot 三十天挑戰賽30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言