1. 使用 @RequestParam
@RequestParam
注解用于将请求中的参数绑定到控制器方法的参数上。
基本用法
java">@GetMapping("/example")
public String example(@RequestParam("paramName") String param) {// 处理 paramreturn "result";
}
可选参数
可以设置 required
属性为 false
,并提供一个 defaultValue
。
java">@GetMapping("/example")
public String example(@RequestParam(value = "paramName", required = false, defaultValue = "default") String param) {// 处理 paramreturn "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) {// 处理 idreturn "result";
}
4. 使用 @RequestBody
@RequestBody
注解用于接收 JSON 或 XML 格式的请求体,并将其转换为 Java 对象。
java">@PostMapping("/example")
public String example(@RequestBody MyObject myObject) {// 处理 myObjectreturn "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) {// 处理 myFormreturn "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-Agentreturn "result";
}
8. 使用 @CookieValue
可以通过 @CookieValue
来获取 cookie 值。
java">@GetMapping("/example")
public String example(@CookieValue("sessionId") String sessionId) {// 处理 sessionIdreturn "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 和 param2return "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) {// 处理 queryParamsreturn "Result: " + queryParams.getParam1() + ", " + queryParams.getParam2();
}
总结
Spring MVC 提供了灵活多样的方法来接收请求参数,包括从 URL、请求体、请求头、cookie 等多种来源。选择合适的方法,不仅能让代码更加简洁,还能提高可维护性和可读性。在实际开发中,根据具体需求合理使用这些注解,将大大提高你的开发效率。