Spring Boot 中的驗證


資料驗證是任何應用程式開發的關鍵組成部分。它確保只有符合預定義標準的高質量資料才能被處理。Spring Boot是Java生態系統中著名的框架,它提供了強大而直接的驗證方法,開發人員可以利用這些方法。本文全面介紹瞭如何在Spring Boot應用程式中進行驗證,使您可以有效地實現這些基本技術。

Spring Boot 中資料驗證的重要性

在 Spring Boot 中,與任何應用程式一樣,資料驗證至關重要。它涉及在處理資料之前確保接收到的資料符合某些條件。驗證檢查的示例包括驗證欄位是否未留空、電子郵件格式是否正確或數字是否在特定範圍內。

Spring Boot 利用 Java Bean Validation 規範(也稱為 JSR 380)及其參考實現 Hibernate Validator 提供的註解來簡化資料驗證過程。

在 Spring Boot 中設定驗證

為了啟動此過程,Spring Boot 的啟動器依賴項使將 Bean Validation API 及其 Hibernate Validator 實現整合到您的專案中變得更加容易。透過將 spring-boot-starter-web 依賴項新增到您的構建配置檔案中,Hibernate Validator 會被隱式包含。

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

有了這個,我們就可以開始在 Spring Boot 應用程式中實現資料驗證了。

實現 Bean Validation API

Bean Validation API 提供了一系列用於物件屬性驗證的註解。這些註解可以應用於您的 Java Bean 欄位或 getter 方法。這是一個示例:

public class User {
   @NotNull
   @Size(min = 2, max = 30)
   private String name;
   @NotNull
   @Email
   private String email;
   // getters and setters
}

在這個 User 類中,我們使用 @NotNull、@Size 和 @Email 註解來定義 name 和 email 欄位的驗證規則。

在控制器中應用驗證

要啟用這些驗證,控制器方法中的物件引數應該用 @Valid 註解。如果物件無效,則會引發異常。以下是它的工作原理:

@PostMapping("/users")
public ResponseEntity<String> addUser(@Valid @RequestBody User user) {
   // method logic
}

在這種情況下,@Valid 註解觸發 User 物件的驗證。如果任何驗證規則被違反,則會引發 MethodArgumentNotValidException 異常。

定製錯誤訊息

可以將自定義錯誤訊息直接新增到 Bean Validation 註解中,以獲得更個性化的體驗:

public class User {
   @NotNull(message = "Name cannot be null")
   @Size(min = 2, max = 30, message = "Name must be between 2 and 30 characters")
   private String name;
   @NotNull(message = "Email cannot be null")
   @Email(message = "Email should be valid")
   private String email;
   // getters and setters
}

處理驗證異常

Spring Boot 還提供了一種透過 @ControllerAdvice 註解在全域性級別處理異常的方法。您可以建立一個類來處理 MethodArgumentNotValidException 並返回自定義響應:

@ControllerAdvice
public class GlobalExceptionHandler {
   @ExceptionHandler(MethodArgumentNotValidException.class)
   public ResponseEntity<List<String>handleValidationExceptions(MethodArgumentNotValidException ex) {
   List<String> errors = ex.getBindingResult()
      .getAllErrors().stream()
      .map(ObjectError::getDefaultMessage
      .collect(Collectors.toList());
   return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST);
   }
}

在這個 GlobalExceptionHandler 類中,handleValidationExceptions 方法用 @ExceptionHandler 註解,指定在丟擲 MethodArgumentNotValidException 時應呼叫它。此方法從異常中獲取所有錯誤並將它們收集到一個列表中,然後在響應實體中以 BAD_REQUEST 狀態返回該列表。

高階驗證:建立自定義註解

Spring Boot 還提供了建立自定義驗證註解的靈活性。此功能允許開發人員編寫標準 Bean Validation 約束未涵蓋的特定規則。

例如,如果您想驗證字串是否不包含任何數字字元,您可以建立一個 NoNumbers 約束註解和一個關聯的驗證器類。

@Target({ ElementType.FIELD, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = NoNumbersValidator.class)
public @interface NoNumbers {
   String message() default "Field should not contain numeric characters";
   Class<>[] groups() default { };
   Class< extends Payload>[] payload() default { };
}

然後在您的驗證器類中實現 ConstraintValidator 介面:

public class NoNumbersValidator implements ConstraintValidator {
   @Override
   public boolean isValid(String value, ConstraintValidatorContext context) {
      return value != null && !value.matches(".*\d.*");
   }
}

結論

Spring Boot 中的資料驗證提供了一種確保應用程式資料可靠性和質量的基本機制。使用 Bean Validation API 和 Hibernate Validator,您可以輕鬆實現和自定義驗證規則。此外,通過了解如何處理異常和建立自定義驗證規則,您可以為 Spring Boot 應用程式建立一個強大而靈活的驗證系統。

更新於:2023年7月19日

2K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告