在Spring Boot應用中,參數校驗是一個非常重要的環節,它能夠確保傳入的數據符合預期的格式和規則,從而避免潛在的錯誤和安全問題。Spring Boot提供了多種方式來進行參數校驗,本文將介紹如何使用這些方法來實現參數校驗。
@Valid注解Spring Boot支持使用@Valid注解來觸發參數校驗。通常,我們會在Controller層的方法參數上使用@Valid注解,并結合@RequestBody或@ModelAttribute來校驗請求體或表單數據。
import javax.validation.Valid;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@PostMapping("/users")
public String createUser(@Valid @RequestBody User user) {
// 處理用戶創建邏輯
return "User created successfully!";
}
}
在上面的代碼中,@Valid注解會觸發對User對象的校驗。如果校驗失敗,Spring Boot會自動返回一個400 Bad Request響應,并包含詳細的錯誤信息。
@NotNull、@Size等注解在實體類中,我們可以使用JSR-303/JSR-380提供的注解來定義校驗規則。常用的注解包括:
@NotNull:字段不能為null。@Size:字符串或集合的長度必須在指定范圍內。@Min、@Max:數字的最小值和最大值。@Pattern:字符串必須匹配指定的正則表達式。import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class User {
@NotNull(message = "用戶名不能為空")
private String username;
@Size(min = 6, max = 20, message = "密碼長度必須在6到20之間")
private String password;
// getters and setters
}
在上面的代碼中,User類的username字段不能為null,password字段的長度必須在6到20之間。如果校驗失敗,Spring Boot會返回相應的錯誤信息。
除了使用內置的校驗注解,我們還可以自定義校驗注解來滿足特定的業務需求。自定義校驗注解通常包括以下幾個步驟:
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = PhoneNumberValidator.class)
public @interface PhoneNumber {
String message() default "Invalid phone number";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class PhoneNumberValidator implements ConstraintValidator<PhoneNumber, String> {
@Override
public boolean isValid(String phoneNumber, ConstraintValidatorContext context) {
// 自定義校驗邏輯
return phoneNumber != null && phoneNumber.matches("^1[3-9]\\d{9}$");
}
}
public class User {
@PhoneNumber(message = "手機號格式不正確")
private String phoneNumber;
// getters and setters
}
在上面的代碼中,我們定義了一個@PhoneNumber注解,并實現了PhoneNumberValidator類來校驗手機號格式。如果校驗失敗,Spring Boot會返回相應的錯誤信息。
為了統一處理校驗失敗的情況,我們可以使用@ControllerAdvice和@ExceptionHandler來捕獲校驗異常,并返回自定義的錯誤響應。
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public String handleValidationExceptions(MethodArgumentNotValidException ex) {
return ex.getBindingResult().getAllErrors().get(0).getDefaultMessage();
}
}
在上面的代碼中,我們捕獲了MethodArgumentNotValidException異常,并返回了第一個校驗錯誤的提示信息。
Spring Boot提供了強大的參數校驗功能,通過使用@Valid注解、JSR-303/JSR-380注解、自定義校驗注解以及全局異常處理,我們可以輕松地實現參數校驗,并確保傳入的數據符合預期的格式和規則。合理使用這些功能,可以大大提高應用的健壯性和安全性。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。