目录
前言
基本知识推荐阅读:
- @pathvariable 和 @Requestparam的详细区别
- 详细分析Java中的@RequestParam和@RequestBody
- java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)
- 【Java项目】实战CRUD的功能整理(持续更新)
主要围绕如下请求方式:
@RequestParam、@PathVariable、@MatrixVariable、@RequestBody、@RequestHeader和@CookieValue的基本知识、详细分析以及示例
1. @RequestParam
用于绑定HTTP请求参数到控制器方法的参数上,常用于处理表单数据或查询参数
@GetMapping("/greeting")
public String greeting(@RequestParam(name="name", required=false, defaultValue="World") String name) {
return "Hello, " + name;
}
基本的属性如下:
- value 或 name: 参数名
- required: 是否为必需参数,默认为true
- defaultValue: 参数的默认值
具体调用两种方式:
/greeting?name=John
,输出Hello, John/greeting
,输出默认值 Hello, World
@RestController
@RequestMapping("/api")
public class MyController {
@PostMapping("/testDate")
public String testDate(@RequestBody Myrequest request) {
Date startDate = request.getStartDate();
return "Received date: " + startDate;
}
@RequestMapping("/processDate")
public String processDate(@RequestParam("myDate") @DateTimeFormat(pattern = "yyyy-MM-dd") Date myDate) {
// 处理日期逻辑
return "Received date: " + myDate;
}
}
对于Postman的使用方式如下:
2. @PathVariable
用于绑定URL中的模板变量到控制器方法的参数上,常用于RESTful风格的URL路径中
@GetMapping("/users/{id}")
public User getUser(@PathVariable("id") Long id) {
return userService.findById(id);
}
基本的属性如下:
- value 或 name: 路径变量名。
- required: 是否为必需参数,默认为true
请求方式: /users/1
,用户ID为1的用户对象
3. @MatrixVariable
用于绑定URL路径中的矩阵变量到控制器方法的参数上,需要在Spring MVC中启用矩阵变量支持
常与路径变量结合使用
@GetMapping("/owners/{ownerId}/pets/{petId}")
public Pet findPet(@PathVariable String ownerId,
@MatrixVariable(name="q", pathVar="petId") int query) {
// 处理代码
}
基本的属性如下:
- value 或 name: 矩阵变量名
- pathVar: 矩阵变量所属的路径变量名
具体调用方式如下:
/owners/42/pets/21;q=123
,提取: ownerId 为42, petId 为21, q 为123
4. @RequestBody
用于将HTTP请求体的内容绑定到控制器方法的参数上,常用于处理JSON、XML等格式的请求数据
@PostMapping("/users")
public User createUser(@RequestBody User user) {
return userService.save(user);
}
- required: 是否为必需参数,默认为true
具体调用方式如下:
HTTP POST请求,内容: {“name”: “John”, “age”: 30}
返回: 创建的用户对象
@RestController
@RequestMapping("/api")
public class MyController {
@PostMapping("/testDate")
public String testDate(@RequestBody Myrequest request) {
Date startDate = request.getStartDate();
return "Received date: " + startDate;
}
@RequestMapping("/processDate")
public String processDate(@RequestParam("myDate") @DateTimeFormat(pattern = "yyyy-MM-dd") Date myDate) {
// 处理日期逻辑
return "Received date: " + myDate;
}
}
对于Postman的使用方式如下:
5. @RequestHeader
用于绑定HTTP请求头到控制器方法的参数上
@GetMapping("/header")
public String getHeader(@RequestHeader("User-Agent") String userAgent) {
return "User-Agent: " + userAgent;
}
- value 或 name: 请求头名
- required: 是否为必需参数,默认为true
- defaultValue: 参数的默认值
具体调用方式如下:
设置请求头User-Agent
返回: 用户代理信息
6. @CookieValue
用于绑定HTTP请求的Cookie值到控制器方法的参数上
@GetMapping("/cookie")
public String getCookie(@CookieValue(value = "sessionId", defaultValue = "defaultSessionId") String sessionId) {
return "Session ID: " + sessionId;
}
具体的属性如下:
- value 或 name: Cookie名
- required: 是否为必需参数,默认为true
- defaultValue: 参数的默认值
具体调用方式如下:
设置Cookie sessionId
返回: 会话ID信息
7. 总结
注解 | 作用 | 属性 | 示例调用 |
---|---|---|---|
@RequestParam | 绑定HTTP请求参数到控制器方法的参数上 | value, required, defaultValue | /greeting?name=John |
@PathVariable | 绑定URL中的模板变量到控制器方法的参数上 | value, required | /users/1 |
@MatrixVariable | 绑定URL路径中的矩阵变量到控制器方法的参数上 | value, pathVar | /owners/42/pets/21;q=123 |
@RequestBody | 将HTTP请求体的内容绑定到控制器方法的参数上 | required | HTTP POST 请求,内容: {“name”: “John”} |
@RequestHeader | 绑定HTTP请求头到控制器方法的参数上 | value, required, defaultValue | 设置请求头User-Agent |
@CookieValue | 绑定HTTP请求的Cookie值到控制器方法的参数上 | value, required, defaultValue | 设置Cookie sessionId |