请求参数注解
# Spring Boot 中常用的请求参数注解
在 Spring Boot 的 Controller 中,我们经常需要获取请求中的参数,例如 URL 中的路径变量、请求参数、请求体等。为了方便地获取这些参数,Spring Boot 提供了很多注解,本文将介绍其中常用的注解,并提供相应的示例代码。
# @PathVariable
@PathVariable
注解用于获取 URL 中的路径变量,即占位符 {}
中的值。例如,我们可以通过以下方式定义一个 URL:
@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
// ...
}
2
3
4
在上述代码中,@GetMapping("/users/{id}")
定义了一个 URL,其中的 {id}
是一个路径变量,它可以通过 @PathVariable
注解来获取。例如,当访问 /users/123
时,Spring Boot 将自动将 123
转换为 Long
类型,并将其注入到 id
参数中。
# @RequestParam
@RequestParam
注解用于获取请求参数的值,可以指定参数名称和默认值。例如,我们可以通过以下方式定义一个 URL:
@GetMapping("/users")
public List<User> getUsersByAge(@RequestParam("age") Integer age) {
// ...
}
2
3
4
在上述代码中,@RequestParam("age")
注解指定了参数名称为 age
,这意味着当使用 /users?age=18
访问该 URL 时,Spring Boot 将自动将 18
转换为 Integer
类型,并将其注入到 age
参数中。如果请求中没有指定 age
参数,那么将使用默认值 null
。
# @RequestBody
@RequestBody
注解用于获取请求体中的内容,一般用于接收 JSON 格式的数据,并将其转换为 Java 对象。例如,我们可以通过以下方式定义一个 URL:
@PostMapping("/users")
public User addUser(@RequestBody User user) {
// ...
}
2
3
4
在上述代码中,@RequestBody
注解将请求体中的 JSON 数据转换为 User
对象,并将其注入到 user
参数中。例如,当使用以下 JSON 数据请求该 URL 时:
{
"name": "Alice",
"age": 18
}
2
3
4
Spring Boot 将自动将该 JSON 数据转换为 User
对象,并将其注入到 user
参数中。
# @RequestHeader
@RequestHeader
注解用于获取请求头中的值,可以指定参数名称和默认值。例如,我们可以通过以下方式定义一个 URL:
@GetMapping("/users")
public List<User> getUsersByHeader(@RequestHeader("User-Agent") String userAgent) {
// ...
}
2
3
4
在上述代码中,@RequestHeader("User-Agent")
注解指定了参数名称为 User-Agent
,这意味着当请求头中包含 User-Agent
参数时,Spring Boot 将自动将其注入到 userAgent
参数中。如果请求头中没有包含 User-Agent
参数,那么将使用默认值 ""
。
# @RequestAttribute
@RequestAttribute
注解用于获取请求属性中的值,一般用于在拦截器中将值存储到请求属性中,并在 Controller 中获取。例如,我们可以通过以下方式定义一个 URL:
@GetMapping("/users")
public List<User> getUsersByAttribute(@RequestAttribute("attr") String attr) {
// ...
}
2
3
4
在上述代码中,@RequestAttribute("attr")
注解指定了属性名称为 attr
,这意味着当请求属性中包含 attr
属性时,Spring Boot 将自动将其注入到 attr
参数中。如果请求属性中没有包含 attr
属性,那么将使用默认值 null
。
# 示例代码
以下是一个完整的 Spring Boot Controller 示例代码,其中包含了上述注解的使用:
@RestController
@RequestMapping("/api")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/users/{id}")
public User getUserById(@PathVariable Longid) {
return userService.getUserById(id);
}
@GetMapping("/users")
public List<User> getUsersByAge(@RequestParam("age") Integer age) {
return userService.getUsersByAge(age);
}
@PostMapping("/users")
public User addUser(@RequestBody User user) {
return userService.addUser(user);
}
@GetMapping("/users")
public List<User> getUsersByHeader(@RequestHeader("User-Agent") String userAgent) {
return userService.getUsersByHeader(userAgent);
}
@GetMapping("/users")
public List<User> getUsersByAttribute(@RequestAttribute("attr") String attr) {
return userService.getUsersByAttribute(attr);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
在上述代码中,我们定义了一个 UserController
类,并在其中定义了 5 个 URL:
/api/users/{id}
:获取指定 ID 的用户;/api/users?age={age}
:获取指定年龄的用户;/api/users
:添加一个新用户;/api/users
:获取指定请求头中的用户;/api/users
:获取指定请求属性中的用户。
在每个 URL 中,我们都使用了不同的请求参数注解,以便于获取不同的参数。例如,在 /api/users/{id}
URL 中,我们使用了 @PathVariable
注解来获取 URL 中的路径变量;在 /api/users?age={age}
URL 中,我们使用了 @RequestParam
注解来获取请求参数;在 /api/users
URL 中,我们使用了 @RequestBody
注解来获取请求体中的内容;在 /api/users
URL 中,我们使用了 @RequestHeader
注解来获取请求头中的值;在 /api/users
URL 中,我们使用了 @RequestAttribute
注解来获取请求属性中的值。
# 总结
Spring Boot 提供了很多注解,可以帮助开发者方便地获取请求中的参数。本文介绍了其中常用的注解,包括 @PathVariable
、@RequestParam
、@RequestBody
、@RequestHeader
和 @RequestAttribute
注解,并提供了相应的示例代码。开发者可以根据自己的需求选择合适的注解,并使用它们来获取请求中的参数。