1. 使用 @RequestParam
@RequestParam
注解用于将请求中的参数绑定到控制器方法的参数上。
基本用法
java
@GetMapping("/example")
public String example(@RequestParam("paramName") String param) {
// 处理 param
return "result";
}
可选参数
可以设置 required
属性为 false
,并提供一个 defaultValue
。
java
@GetMapping("/example")
public String example(@RequestParam(value = "paramName", required = false, defaultValue = "default") String param) {
// 处理 param
return "result";
}
2. 接收多个请求参数
可以使用 Map<String, String>
来接收所有请求参数。
java
@GetMapping("/example")
public String example(@RequestParam Map<String, String> params) {
// 处理所有请求参数
for (String key : params.keySet()) {
System.out.println(key + ": " + params.get(key));
}
return "result";
}
3. 使用 @PathVariable
当 URL 包含动态部分(路径参数)时,可以使用 @PathVariable
注解来捕获这些变量。
java
@GetMapping("/example/{id}")
public String example(@PathVariable("id") Long id) {
// 处理 id
return "result";
}
4. 使用 @RequestBody
@RequestBody
注解用于接收 JSON 或 XML 格式的请求体,并将其转换为 Java 对象。
java
@PostMapping("/example")
public String example(@RequestBody MyObject myObject) {
// 处理 myObject
return "result";
}
自定义对象的示例
java
public class MyObject {
private String name;
private int age;
// Getters and Setters
}
// 控制器
@PostMapping("/example")
public String example(@RequestBody MyObject myObject) {
System.out.println(myObject.getName());
return "result";
}
5. 使用 @ModelAttribute
@ModelAttribute
用于将请求参数自动封装到 Java 对象中,通常用于表单提交。
java
public class MyForm {
private String username;
private String password;
// Getters and Setters
}
@PostMapping("/submit")
public String submit(@ModelAttribute MyForm myForm) {
// 处理 myForm
return "result";
}
6. 接收文件上传
对于文件上传,可以使用 @RequestParam
并指定类型为 MultipartFile
。
java
@PostMapping("/upload")
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
if (!file.isEmpty()) {
// 处理文件
String filename = file.getOriginalFilename();
System.out.println("Uploaded file: " + filename);
}
return "result";
}
7. 使用 @RequestHeader
可以使用 @RequestHeader
来获取 HTTP 请求头信息。
java
@GetMapping("/example")
public String example(@RequestHeader("User-Agent") String userAgent) {
// 处理 User-Agent
return "result";
}
8. 使用 @CookieValue
可以通过 @CookieValue
来获取 cookie 值。
java
@GetMapping("/example")
public String example(@CookieValue("sessionId") String sessionId) {
// 处理 sessionId
return "result";
}
9. 处理复杂对象
你可以结合 @ModelAttribute
和嵌套对象来处理更复杂的表单。
java
public class Address {
private String street;
private String city;
// Getters and Setters
}
public class User {
private String name;
private Address address;
// Getters and Setters
}
@PostMapping("/user")
public String createUser(@ModelAttribute User user) {
// 处理用户信息
return "result";
}
10. 接收多个 Query 参数
java
@GetMapping("/example")
public String example(@RequestParam("param1") String param1, @RequestParam("param2") String param2) {
// 处理 param1 和 param2
return "Result: " + param1 + ", " + param2;
}
11. 创建一个 POJO 类来封装多个 Query 参数
java
public class QueryParams {
private String param1;
private String param2;
// Getters and Setters
}
@GetMapping("/example")
public String example(QueryParams queryParams) {
// 处理 queryParams
return "Result: " + queryParams.getParam1() + ", " + queryParams.getParam2();
}
总结
Spring MVC 提供了灵活多样的方法来接收请求参数,包括从 URL、请求体、请求头、cookie 等多种来源。选择合适的方法,不仅能让代码更加简洁,还能提高可维护性和可读性。在实际开发中,根据具体需求合理使用这些注解,将大大提高你的开发效率。