Springboot中Controller接收参数的方式
在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@GetMappingpublic 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请求参数! 🚀