Yang's blog Yang's blog
首页
Java
密码学
机器学习
命令手册
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

xiaoyang

编程爱好者
首页
Java
密码学
机器学习
命令手册
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • SpringCloud

    • 微服务架构介绍
    • SpringCloud介绍
    • Spring Cloud:生产者与消费者
    • Spring Cloud Eureka:构建可靠的服务注册与发现
    • Spring Cloud Ribbon:负载均衡
    • Spring Cloud Fegin:服务调用
    • Spring Cloud Hystrix:熔断器
    • Spring Cloud Zuul:统一网关路由
    • Spring Cloud Config:配置中心
  • Java后端框架

    • LangChain4j

      • 介绍
      • 快速开始
      • Chat and Language Models
      • Chat Memory
      • Model Parameters
      • Response Streaming
      • AI Services
      • Agent
      • Tools (Function Calling)
      • RAG
      • Structured Outputs
      • Classification
      • Embedding (Vector) Stores
      • Image Models
      • Quarkus Integration
      • Spring Boot Integration
      • Kotlin Support
      • Logging
      • Observability
      • Testing and Evaluation
      • Model Context Protocol
  • 八股文

    • 操作系统
    • JVM介绍
    • Java多线程
    • Java集合框架
    • Java反射
    • JavaIO
    • Mybatis介绍
    • Spring介绍
    • SpringBoot介绍
    • Mysql
    • Redis
    • 数据结构
    • 云计算
    • 设计模式
    • 计算机网络
    • 锁核心类AQS
    • Nginx
  • 前端技术

    • 初识Vue3
    • Vue3数据双向绑定
    • Vue3生命周期
    • Vue-Router 组件
    • Pinia 集中式状态存储
  • 中间件

    • RocketMQ
  • 开发知识

    • 请求参数注解
      • @PathVariable
      • @RequestParam
      • @RequestBody
      • @RequestHeader
      • @RequestAttribute
      • 示例代码
      • 总结
    • 时间复杂度和空间复杂度
    • JSON序列化与反序列化
    • Timestamp vs Datetime
    • Java开发中必备能力单元测试
    • 正向代理和反向代理
    • 什么是VPN
    • 正则表达式
  • Java
  • 开发知识
xiaoyang
2024-05-07
目录

请求参数注解

# Spring Boot 中常用的请求参数注解

在 Spring Boot 的 Controller 中,我们经常需要获取请求中的参数,例如 URL 中的路径变量、请求参数、请求体等。为了方便地获取这些参数,Spring Boot 提供了很多注解,本文将介绍其中常用的注解,并提供相应的示例代码。

# @PathVariable

@PathVariable 注解用于获取 URL 中的路径变量,即占位符 {} 中的值。例如,我们可以通过以下方式定义一个 URL:

@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
    // ...
}
1
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) {
    // ...
}
1
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) {
    // ...
}
1
2
3
4

在上述代码中,@RequestBody 注解将请求体中的 JSON 数据转换为 User 对象,并将其注入到 user 参数中。例如,当使用以下 JSON 数据请求该 URL 时:

{
  "name": "Alice",
  "age": 18
}
1
2
3
4

Spring Boot 将自动将该 JSON 数据转换为 User 对象,并将其注入到 user 参数中。

# @RequestHeader

@RequestHeader 注解用于获取请求头中的值,可以指定参数名称和默认值。例如,我们可以通过以下方式定义一个 URL:

@GetMapping("/users")
public List<User> getUsersByHeader(@RequestHeader("User-Agent") String userAgent) {
    // ...
}
1
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) {
    // ...
}
1
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);
    }

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

编辑 (opens new window)
上次更新: 2025/04/01, 01:48:12

← RocketMQ 时间复杂度和空间复杂度→

最近更新
01
操作系统
03-18
02
Nginx
03-17
03
后端服务端主动推送消息的常见方式
03-11
更多文章>
Theme by Vdoing | Copyright © 2023-2025 xiaoyang | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式