常见用于从 HTTP 请求中提取数据的注解

在 Spring 框架中,处理 HTTP 请求并从中提取数据的注解有很多,具体取决于请求的类型(如 GET、POST、PUT 等)以及数据的来源(如请求头、路径、查询参数、请求体等)。以下是一些常见的注解,用于从 HTTP 请求中提取不同的数据。

1. @RequestParam

用于从 URL 查询参数 或 表单数据 中提取参数。常用于 GET 请求或表单提交的 POST 请求。

用法:用于从查询字符串(例如 ?name=John&age=30)或表单数据中提取参数。

示例:

java 复制代码
@GetMapping("/search")
public String search(@RequestParam String name, @RequestParam int age) {
    return "Searching for " + name + " aged " + age;
}

通过 URL 查询字符串传递数据:

sql 复制代码
GET /search?name=John&age=30

常见选项:

required: 设置为 false 时,参数可以是可选的。

defaultValue: 设置默认值,当请求中没有该参数时使用。

2. @PathVariable

用于从 URL 路径 中提取数据。适用于 RESTful 风格的 API,通常用于动态路径参数。

用法:从 URL 路径中提取变量部分。

示例:

java 复制代码
@GetMapping("/user/{id}")
public String getUser(@PathVariable String id) {
    return "User ID: " + id;
}

通过 URL 路径传递数据:

java 复制代码
GET /user/123

常见选项:

可以使用多个 @PathVariable 注解提取多个路径参数。

3. @RequestBody

用于从 HTTP 请求的请求体 中提取数据,通常用于处理 JSON 或 XML 格式的数据。

用法:提取请求体中的内容并将其转换为 Java 对象(通常是 JSON)。

示例:

java 复制代码
@PostMapping("/user")
public String createUser(@RequestBody User user) {
    return "Created user: " + user.getName();
}

请求体的示例(JSON 格式):

json 复制代码
{
  "name": "John",
  "age": 30
}

常见选项:

需要配置 HttpMessageConverter(如 Jackson)来自动转换请求体的 JSON 数据为 Java 对象。

4. @RequestHeader

用于从 HTTP 请求头 中提取数据。常用于获取请求中的元数据,如认证信息、内容类型、语言设置等。

用法:用于提取请求头中的信息。

示例:

java 复制代码
@GetMapping("/header")
public String getHeader(@RequestHeader("User-Agent") String userAgent) {
    return "User-Agent: " + userAgent;
}

请求头的示例:

json 复制代码
User-Agent: Mozilla/5.0

常见选项:

required: 设置为 false 时,表示请求头参数是可选的。

5. @CookieValue

用于从 HTTP 请求的 Cookie 中提取数据。通常用于获取存储在客户端浏览器中的 Cookie 值。

用法:用于提取 Cookie 中的数据。

示例:

java 复制代码
@GetMapping("/cookie")
public String getCookie(@CookieValue("session_id") String sessionId) {
    return "Session ID: " + sessionId;
}

请求头的示例:

json 复制代码
Cookie: session_id=abcd1234

常见选项:

defaultValue: 如果 Cookie 中没有值,可以设置默认值。

6. @ModelAttribute

用于将 表单数据(或请求参数)绑定到一个 Java 对象。通常用于处理表单提交的 POST 请求。

用法:将多个请求参数绑定到一个 Java 对象中,通常用于表单数据提交。

示例:

java 复制代码
@PostMapping("/user")
public String createUser(@ModelAttribute User user) {
    return "Created user: " + user.getName();
}

表单提交的示例:

html 复制代码
<form method="post" action="/user">
    <input type="text" name="name">
    <input type="number" name="age">
    <button type="submit">Submit</button>
</form>
7. @RequestMapping

这是一个通用的注解,通常与 method 属性一起使用,来映射请求路径和 HTTP 方法。它可以与其他注解(如 @RequestParam、@PathVariable 等)结合使用来提取请求参数。

用法:@RequestMapping 可以处理各种 HTTP 方法,如 GET、POST、PUT、DELETE 等。

示例:

java 复制代码
@RequestMapping(value = "/product/{id}", method = RequestMethod.GET)
public String getProduct(@PathVariable String id, @RequestParam String name) {
    return "Product ID: " + id + ", Product Name: " + name;
}
8. @RequestParam 和 @PathVariable 的结合使用

你可以同时使用 @RequestParam 和 @PathVariable 来提取不同来源的数据。

示例:

java 复制代码
@GetMapping("/product/{id}")
public String getProduct(@PathVariable String id, @RequestParam String name) {
    return "Product ID: " + id + ", Product Name: " + name;
}

请求 URL:

bash 复制代码
GET /product/123?name=ProductA

总结

@RequestParam:用于从查询参数或表单数据中提取数据。

@PathVariable:用于从 URL 路径中提取数据。

@RequestBody:用于从请求体中提取数据(如 JSON 或 XML 格式)。

@RequestHeader:用于从请求头中提取数据。

@CookieValue:用于从请求的 Cookie 中提取数据。

@ModelAttribute:用于将多个请求参数绑定到一个 Java 对象。

@RequestMapping:用于映射 HTTP 请求到控制器方法,可以结合其他注解使用。

这些注解可以灵活地与 Spring 的控制器方法结合使用,帮助你从 HTTP 请求的不同部分提取所需的数据。

相关推荐
王ASC11 小时前
SpringMVC的URL组成,以及URI中对/斜杠的处理,解决IllegalStateException: Ambiguous mapping
java·mvc·springboot·web
撒呼呼11 小时前
# 起步专用 - 哔哩哔哩全模块超还原设计!(内含接口文档、数据库设计)
数据库·spring boot·spring·mvc·springboot
灰色孤星A18 小时前
瑞吉外卖项目学习笔记(四)@TableField(fill = FieldFill.INSERT)公共字段填充、启用/禁用/修改员工信息
java·学习笔记·springboot·瑞吉外卖·黑马程序员·tablefield·公共字段填充
武子康3 天前
Java-31 深入浅出 Spring - IoC 基础 启动IoC XML与注解结合的方式 配置改造 applicationContext.xml
java·大数据·spring·mybatis·springboot
synda@hzy3 天前
MONI后台管理系统-系统三员的设计
java·springboot·等级保护·三员管理
灰色孤星A3 天前
瑞吉外卖项目学习笔记(二)Swagger、logback、表单校验和参数打印功能的实现
springboot·logback·swagger·瑞吉外卖·切面编程·表单校验·黑马程序员
langzitianya3 天前
RestTemplate实时接收Chunked编码传输的HTTP Response
springboot·stream·resttemplate·chunked·流式
武子康3 天前
Java-30 深入浅出 Spring - IoC 基础 启动IoC 纯XML启动 Bean、DI注入
xml·java·开发语言·后端·spring·mybatis·springboot
Moshow郑锴4 天前
Spring Boot中CollectionUtils怎么用
springboot·数组·collectionutil
武子康4 天前
大数据-253 离线数仓 - Airflow 任务调度 核心概念与实际案例测试 Py脚本编写
java·大数据·数据仓库·hive·hadoop·springboot