知識庫 / Spring / Spring MVC RSS 訂閱

Spring @RequestParam 註解

Spring MVC
HongKong
13
01:36 PM · Dec 06 ,2025

1. 概述

在本快速教程中,我們將探討 Spring 框架中的 <em @RequestParam</em> 註解及其屬性。

簡單來説,我們可以使用 `` 來從請求中提取查詢參數、表單參數,甚至文件。

2. 一個簡單的映射

假設我們有一個端點 /api/foos ,它接受一個名為 id 的查詢參數:

@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam String id) {
    return "ID: " + id;
}

在此示例中,我們使用了 @RequestParam 來提取 id 查詢參數。

一個簡單的 GET 請求會調用 getFoos

http://localhost:8080/spring-mvc-basics/api/foos?id=abc
----
ID: abc

接下來,讓我們來查看標註的屬性:`name, value, required, 和 defaultValue

3. 指定請求參數名稱

在之前的示例中,變量名和參數名稱都是相同的。

但有時我們希望它們不同。 或者,如果我們不使用 Spring Boot,則可能需要進行編譯時配置,否則參數名稱實際上不會出現在字節碼中。

幸運的是,我們可以使用 @RequestParamname 屬性來配置名稱:

@PostMapping("/api/foos")
@ResponseBody
public String addFoo(@RequestParam(name = "id") String fooId, @RequestParam String name) { 
    return "ID: " + fooId + " Name: " + name;
}

我們還可以使用 @RequestParam(value = “id”),或者僅僅使用 @RequestParam(“id”).

4. 可選請求參數

使用@RequestParam註解的方法參數默認是必需的。

這意味着如果請求中缺少該參數,將會導致錯誤:

GET /api/foos HTTP/1.1
-----
400 Bad Request
Required String parameter 'id' is not present

我們可以配置我們的 為可選的,通過使用 屬性:

@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam(required = false) String id) { 
    return "ID: " + id;
}

在這種情況下,以下兩者:

http://localhost:8080/spring-mvc-basics/api/foos?id=abc
----
ID: abc

並且

http://localhost:8080/spring-mvc-basics/api/foos
----
ID: null

將正確地調用該方法。

當參數未指定時,方法參數將綁定到 null

4.1. 使用 Java 8 的 Optional

或者,我們可以將參數包裹在 Optional 中:

@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam Optional<String> id){
    return "ID: " + id.orElseGet(() -> "not provided");
}

在這種情況下,我們不需要指定 required 屬性。

如果未提供請求參數,則將使用默認值:

http://localhost:8080/spring-mvc-basics/api/foos 
---- 
ID: not provided

5. 請求參數的默認值

我們還可以通過使用 defaultValue 屬性,為 @RequestParam 設置默認值:

@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam(defaultValue = "test") String id) {
    return "ID: " + id;
}

這類似於不需指定參數,用户不再需要提供該參數

http://localhost:8080/spring-mvc-basics/api/foos
----
ID: test

儘管如此,我們仍然可以提供它:

http://localhost:8080/spring-mvc-basics/api/foos?id=abc
----
ID: abc

請注意,當我們設置 defaultValue 屬性時,required 屬性確實被設置為 false

6. 映射所有參數

我們還可以擁有多個參數,而無需定義它們的名稱,或者僅使用&lt;em&gt;Map&lt;/em&gt;進行計數:

@PostMapping("/api/foos")
@ResponseBody
public String updateFoos(@RequestParam Map<String,String> allParams) {
    return "Parameters are " + allParams.entrySet();
}

這將會反向反映任何發送的參數:

curl -X POST -F 'name=abc' -F 'id=123' http://localhost:8080/spring-mvc-basics/api/foos
-----
Parameters are {[name=abc], [id=123]}

7. 映射多值參數

單個 @RequestParam 可以有多個值:

@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam List<String> id) {
    return "IDs are " + id;
}

並且 Spring MVC 會將逗號分隔的 參數映射到相應的對象:

http://localhost:8080/spring-mvc-basics/api/foos?id=1,2,3
----
IDs are [1,2,3]

或一個由單獨的id參數組成的列表:

http://localhost:8080/spring-mvc-basics/api/foos?id=1&id=2
----
IDs are [1,2]

8. 結論

在本文中,我們學習瞭如何使用 @RequestParam

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

發佈 評論

Some HTML is okay.