在Spring Boot中,@Controller
或@RestController
可以通过多种方式接收客户端传递的参数,主要包括以下几种常见方式:
1. 接收路径参数(@PathVariable
)
从URL路径中提取参数,适用于RESTful风格的API。
示例
@RestController
@RequestMapping("/user")
public class UserController {
// 示例URL: /user/123
@GetMapping("/{id}")
public String getUserById(@PathVariable Long id) {
return "User ID: " + id;
}
// 多个路径变量
@GetMapping("/{name}/{age}")
public String getUserInfo(
@PathVariable String name,
@PathVariable int age) {
return "Name: " + name + ", Age: " + age;
}
}
2. 接收查询参数(@RequestParam
)
从URL的?key=value
格式中获取参数,适用于GET请求。
示例
@RestController
@RequestMapping("/search")
public class SearchController {
// 示例URL: /search?keyword=spring
@GetMapping
public String search(@RequestParam String keyword) {
return "Searching for: " + keyword;
}
// 可选参数(默认值)
@GetMapping("/optional")
public String searchOptional(
@RequestParam(required = false, defaultValue = "default") String keyword) {
return "Keyword: " + keyword;
}
// 接收多个参数
@GetMapping("/multi")
public String multiParams(
@RequestParam String name,
@RequestParam int age) {
return "Name: " + name + ", Age: " + age;
}
}
3. 接收表单数据(@ModelAttribute
)
适用于HTML表单提交(POST请求),自动绑定到Java对象。
示例
@RestController
@RequestMapping("/form")
public class FormController {
// 接收表单数据并绑定到User对象
@PostMapping("/submit")
public String submitForm(@ModelAttribute User user) {
return "Submitted: " + user.getName() + ", " + user.getAge();
}
}
// User.java
public class User {
private String name;
private int age;
// getters & setters
}
4. 接收JSON请求体(@RequestBody
)
适用于POST/PUT请求,接收JSON格式数据并自动映射到Java对象。
示例
@RestController
@RequestMapping("/api")
public class ApiController {
// 接收JSON数据并映射到User对象
@PostMapping("/create")
public String createUser(@RequestBody User user) {
return "Created: " + user.getName() + ", " + user.getAge();
}
}
请求示例(POST /api/create
)
{
"name": "Alice",
"age": 25
}
5. 接收HTTP请求头(@RequestHeader
)
获取HTTP请求头信息,如Authorization
、Content-Type
等。
示例
@RestController
@RequestMapping("/header")
public class HeaderController {
@GetMapping("/info")
public String getHeader(@RequestHeader("User-Agent") String userAgent) {
return "User-Agent: " + userAgent;
}
}
6. 接收Cookie(@CookieValue
)
获取客户端发送的Cookie值。
示例
@RestController
@RequestMapping("/cookie")
public class CookieController {
@GetMapping("/get")
public String getCookie(@CookieValue("JSESSIONID") String sessionId) {
return "Session ID: " + sessionId;
}
}
7. 接收文件上传(MultipartFile
)
适用于文件上传(如<input type="file">
)。
示例
@RestController
@RequestMapping("/upload")
public class UploadController {
@PostMapping("/file")
public String uploadFile(@RequestParam("file") MultipartFile file) {
return "File uploaded: " + file.getOriginalFilename() + ", Size: " + file.getSize();
}
}
总结
方式 | 适用场景 | 注解 | 示例 |
---|---|---|---|
路径参数 | RESTful API(如/user/{id} ) | @PathVariable | /user/123 → id=123 |
查询参数 | GET请求(?key=value ) | @RequestParam | /search?q=spring |
表单数据 | HTML表单提交(POST) | @ModelAttribute | <form> → User 对象 |
JSON请求体 | POST/PUT请求(JSON数据) | @RequestBody | {"name": "Alice"} |
HTTP请求头 | 获取请求头信息 | @RequestHeader | Authorization: Bearer xxx |
Cookie | 获取Cookie值 | @CookieValue | JSESSIONID=xxx |
文件上传 | 文件上传(<input type="file"> ) | MultipartFile | 上传图片/文档 |
最佳实践
- RESTful API:优先使用
@PathVariable
+@RequestBody
。 - 表单提交:使用
@ModelAttribute
或@RequestParam
。 - 文件上传:使用
MultipartFile
。 - 复杂参数:使用
@RequestBody
接收JSON数据。
掌握这些方式后,可以灵活处理各种HTTP请求参数! 🚀