首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring MVC 使用 @Validated 註解實現 RequestParam 參數校驗

     編輯:Java 相關知識

背景痛點

Spring MVC 原生支持 Bean Validation(JSR-303),但 @Valid 僅作用於 @RequestBody 或 @ModelAttribute 綁定的對象。對於 @RequestParam 綁定的單個基本類型參數,直接加 @Size 等註解無效。本文介紹如何通過 @Validated 開啟方法級校驗能力。

核心步驟

1. 定義全局異常處理器(啟用方法校驗)

@ControllerAdvice
@Component
public class GlobalExceptionHandler {

    @Bean
    public MethodValidationPostProcessor methodValidationPostProcessor() {
        return new MethodValidationPostProcessor(); // 關鍵:註冊方法校驗後處理器
    }

    @ExceptionHandler(ValidationException.class)
    @ResponseBody
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public String handle(ValidationException ex) {
        System.out.println("bad request, " + ex.getMessage());
        return "bad request, " + ex.getMessage();
    }
}

MethodValidationPostProcessor 會掃描帶 @Validated 的 Controller,為其方法參數織入校驗邏輯。

2. Controller 標註 @Validated 並在參數上加校驗註解

對比:傳統 Bean 對象校驗

對於完整對象,仍使用 @Valid + BindingResult:

@PostMapping("validObject")
public String validObject(@RequestBody @Valid Foo foo, BindingResult result) {
    if (result.hasErrors()) { ... }
    return foo.getValidString();
}

關鍵差異總結

場景註解是否需 @Validated 類註解
@RequestBody / @ModelAttribute 對象@Valid否
@RequestParam / @PathVariable 單參數@Size、@NotNull 等是(類上加 @Validated)

常見坑點提示

  • 忘記在類上加 @Validated → 校驗不生效,無任何報錯。
  • 缺少 MethodValidationPostProcessor Bean → 同樣不生效。
  • 校驗失敗拋出 ConstraintViolationException(繼承自 ValidationException),需在 @ExceptionHandler 中捕獲對應異常類型。

總結

@Validated 開啟了 Spring MVC 方法級參數校驗能力,讓 @RequestParam、@PathVariable 等單參數也能享受聲明式校驗。配合全局異常處理,即可實現優雅的參數校驗與統一錯誤響應。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved