在前幾天的文章中探討了 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) {
// ...
}
}
以上程式碼目的是在確保輸入之資料在進入業務邏輯處理前就符合要求,否則會回傳驗證錯誤。