SpringBoot 提供了多種注解來方便地從 HTTP 請求中獲取參數
以下是主要的注解及其用法:
1.?@RequestParam
用于獲取查詢參數(URL 參數),適用于 GET 請求或 POST 表單提交。
@GetMapping("/user")
public String getUser(@RequestParam("id") Long userId) {return "User ID: " + userId;
}// 可選參數,設置默認值
@GetMapping("/search")
public String search(@RequestParam(value = "q", required = false, defaultValue = "") String query) {return "Search: " + query;
}
2.?@PathVariable
用于獲取 URL 路徑中的變量。
@GetMapping("/user/{id}")
public String getUser(@PathVariable("id") Long userId) {return "User ID: " + userId;
}// 當變量名與方法參數名相同時可省略
@GetMapping("/article/{slug}")
public String getArticle(@PathVariable String slug) {return "Article: " + slug;
}
3.?@RequestBody
用于獲取請求體中的 JSON/XML 數據,通常用于 POST/PUT 請求。
@PostMapping("/user")
public String createUser(@RequestBody User user) {return "Created user: " + user.getName();
}
4.?@RequestHeader
用于獲取 HTTP 請求頭中的值。
@GetMapping("/info")
public String getInfo(@RequestHeader("User-Agent") String userAgent) {return "User Agent: " + userAgent;
}
5.?@CookieValue
用于獲取 HTTP 請求中的 Cookie 值。
@GetMapping("/home")
public String home(@CookieValue("JSESSIONID") String sessionId) {return "Session ID: " + sessionId;
}
6.?@ModelAttribute
用于綁定請求參數到模型對象,適用于表單提交。
@PostMapping("/register")
public String register(@ModelAttribute User user) {return "Registered: " + user.getName();
}
7.?@RequestPart
用于處理 multipart/form-data 請求中的文件上傳。
@PostMapping("/upload")
public String uploadFile(@RequestPart("file") MultipartFile file) {return "Uploaded: " + file.getOriginalFilename();
}
8. 直接使用 Servlet API
SpringBoot 也支持直接使用 Servlet API 對象:
@GetMapping("/example")
public String example(HttpServletRequest request, HttpServletResponse response) {String param = request.getParameter("param");return "Parameter: " + param;
}
9. 獲取所有參數
@RequestParam Map
?獲取所有查詢參數
@GetMapping("/params")
public String getAllParams(@RequestParam Map<String, String> allParams) {return "All params: " + allParams.toString();
}
@RequestParam MultiValueMap
?獲取可能有多個值的參數
@GetMapping("/multiParams")
public String getMultiParams(@RequestParam MultiValueMap<String, String> params) {return "Multi params: " + params.toString();
}
10. 參數綁定到對象
SpringBoot 支持自動將請求參數綁定到 Java 對象:
@GetMapping("/filter")
public String filterUsers(UserFilter filter) {return "Filtering by: " + filter.toString();
}// UserFilter 類示例
public class UserFilter {private String name;private Integer age;// getters and setters
}
注意事項
請求示例:
/filter?name=John&age=25
大多數注解都有?
required
?和?defaultValue
?屬性可以配置對于復雜嵌套對象,SpringBoot 也能自動綁定
參數名稱默認會與方法參數名匹配,除非在注解中指定
可以通過配置?
spring.mvc.hiddenmethod.filter.enabled=true
?來支持 PUT/DELETE 等方法的表單提交