 请求参数注解
请求参数注解
  # 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 注解,并提供了相应的示例代码。开发者可以根据自己的需求选择合适的注解,并使用它们来获取请求中的参数。
