知識庫 / Spring / Spring MVC RSS 訂閱

驗證請求參數和路徑變量(Spring)

Spring MVC
HongKong
5
01:26 PM · Dec 06 ,2025

1. 簡介

本教程將介紹如何驗證 Spring MVC 中 HTTP 請求參數和路徑變量,以及如何使用 JSR 303 註解驗證字符串和數字參數。

我們將驗證 StringNumber 參數,並使用 JSR 303 註解

要探索其他類型的驗證,您可以參考我們關於 Java Bean Validation 和方法約束的教程,或者學習如何創建自定義驗證器。

2. 配置

要使用 Java 驗證 API,我們需要添加一個 JSR 303 實現,例如:hibernate-validator:

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>8.0.1.Final</version>
</dependency>

我們還需要在我們的控制器中啓用對請求參數和路徑變量的驗證,通過添加 @Validated 註解來實現。

@RestController
@RequestMapping("/")
@Validated
public class RequestAndPathVariableValidationController {
    // ...
}

需要注意的是,啓用參數驗證也需要一個 MethodValidationPostProcessor Bean

如果我們在使用 Spring Boot 應用程序,則此 Bean 會自動配置,因為我們 classpath 上有 hibernate-validator 依賴。

否則,在標準 Spring 應用程序中,我們必須顯式添加此 Bean:

@EnableWebMvc
@Configuration
@ComponentScan("com.baeldung.spring")
public class ClientWebConfigJava implements WebMvcConfigurer {
    @Bean
    public MethodValidationPostProcessor methodValidationPostProcessor() {
        return new MethodValidationPostProcessor();
    }
    // ...
}

默認情況下,Spring 中路徑或請求驗證過程中出現的任何錯誤都將導致 HTTP 500 響應。在本教程中,我們將使用 ControllerAdvice 的自定義實現,以更易讀的方式處理此類錯誤,並返回 HTTP 400 狀態碼,用於處理任何無效請求。該解決方案的源代碼可在 GitHub 找到。

3. 驗證 RequestParam

以下是一個示例,其中我們將一個數字星期幾作為請求參數傳遞到控制器方法中:

@GetMapping("/name-for-day")
public String getNameOfDayByNumberRequestParam(@RequestParam Integer dayOfWeek) {
    // ...
}

我們的目標是確保 dayOfWeek 的值在 1 到 7 之間。為此,我們將使用 @Min@Max 註解。

@GetMapping("/name-for-day")
public String getNameOfDayByNumberRequestParam(@RequestParam @Min(1) @Max(7) Integer dayOfWeek) {
    // ...
}

任何不符合這些條件的請求將返回 HTTP 狀態碼 400,並附帶默認錯誤消息。

如果調用 http://localhost:8080/name-for-day?dayOfWeek=24,例如,響應消息將是:

getNameOfDayByNumber.dayOfWeek: must be less than or equal to 7
我們可以通過添加自定義消息來更改默認消息。
@Max(value = 1, message = “day number has to be less than or equal to 7”)

4. 驗證 @PathVariable

@RequestParam 類似,我們也可以使用來自 jakarta.validation.constraints 包中的任何註解來驗證 @PathVariable

考慮一個示例,其中我們驗證一個 String 參數是否為空且長度小於或等於 10:

@GetMapping("/valid-name/{name}")
public void validStringRequestParam(@PathVariable("name") @NotBlank @Size(max = 10) String username) {
    // ...
}

任何帶有參數的請求,如果該參數長度超過 10 個字符,例如,將會導致 HTTP 400 錯誤,並返回以下消息:

createUser.name:size must be between 0 and 10

默認消息可以輕鬆地通過在<em>@Size</em>註解中設置<em>message</em>參數來覆蓋。

5. 結論

在本文中,我們學習瞭如何在 Spring 應用中驗證請求參數和路徑變量。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.