当前位置: 首页 > news >正文

Spring MVC 注解详解:@RequestBody,@RequestParam 和 @PathVariable

Spring MVC 提供了一系列注解,用于简化请求数据的获取和处理。了解并掌握这些注解的使用,对于开发RESTful API和处理HTTP请求至关重要。本文将详细介绍 @RequestBody@RequestParam@PathVariable 注解,并附带具体的代码示例,帮助开发者更好地理解它们的用途和使用方法。

1. @RequestBody 注解

1.1 注解说明

@RequestBody 用于将 HTTP 请求体中的数据绑定到方法参数上。常用于接收 JSON 或 XML 格式的数据并将其转换为对应的 Java 对象。Spring MVC 使用消息转换机制(MessageConverter)将请求体的数据转换为 Java 对象。

1.2 使用场景

  • 接收客户端发送的 JSON 数据。
  • 处理复杂的数据结构,如嵌套对象等。

1.3 具体代码示例

1.3.1 接收简单对象

假设我们有一个简单的 User 类:

 

java

public class User { private String name; private int age; // Getters and Setters }

控制器方法如下:

 

java

@RestController public class UserController { @PostMapping("/user") public ResponseEntity<User> createUser(@RequestBody User user) { // 处理逻辑 // 假设这里我们只是返回接收到的用户信息 return new ResponseEntity<>(user, HttpStatus.OK); } }

请求示例:

 

bash

curl -X POST -H "Content-Type: application/json" -d '{"name": "John Doe", "age": 25}' http://localhost:8080/user

1.3.2 接收复杂对象

假设我们有一个复杂的 Order 对象,其中包含一个 User 和多个 Item

 

java

public class Item { private String name; private double price; // Getters and Setters } public class Order { private User customer; private List<Item> items; // Getters and Setters }

控制器方法如下:

 

java

@RestController public class OrderController { @PostMapping("/order") public ResponseEntity<Order> createOrder(@RequestBody Order order) { // 处理逻辑 // 假设这里我们只是返回接收到的订单信息 return new ResponseEntity<>(order, HttpStatus.OK); } }

请求示例:

 

bash

curl -X POST -H "Content-Type: application/json" -d '{ "customer": {"name": "John Doe", "age": 25}, "items": [{"name": "Item1", "price": 19.99}, {"name": "Item2", "price": 5.99}] }' http://localhost:8080/order

2. @RequestParam 注解

2.1 注解说明

@RequestParam 用于将请求参数(如 URL 中的查询参数)绑定到方法参数上。它支持默认值和必需参数的设置,可以处理单个参数和参数列表。

2.2 使用场景

  • 处理 URL 中的查询参数。
  • 处理表单数据(application/x-www-form-urlencoded)。

2.3 具体代码示例

2.3.1 获取单个请求参数
 

java

@RestController public class GreetingController { @GetMapping("/greeting") public ResponseEntity<String> greeting(@RequestParam(name = "name", required = false, defaultValue = "World") String name) { return new ResponseEntity<>("Hello, " + name, HttpStatus.OK); } }

请求示例:

 

bash

curl http://localhost:8080/greeting?name=John

返回结果:

 

Hello, John

未指定参数时使用默认值:

 

bash

curl http://localhost:8080/greeting

返回结果:

 

Hello, World

2.3.2 获取多个请求参数
 

java

@RestController public class SearchController { @GetMapping("/search") public ResponseEntity<String> search(@RequestParam String keyword, @RequestParam int page) { return new ResponseEntity<>("Searching for " + keyword + " on page " + page, HttpStatus.OK); } }

请求示例:

 

bash

curl http://localhost:8080/search?keyword=Spring&page=2

返回结果:

 

Searching for Spring on page 2

2.3.3 获取参数列表
 

java

@RestController public class FilterController { @GetMapping("/filter") public ResponseEntity<String> filter(@RequestParam List<String> categories) { return new ResponseEntity<>("Filtering categories: " + String.join(", ", categories), HttpStatus.OK); } }

请求示例:

 

bash

curl http://localhost:8080/filter?categories=books&categories=electronics&categories=clothes

返回结果:

 

Filtering categories: books, electronics, clothes

3. @PathVariable 注解

3.1 注解说明

@PathVariable 用于将 URL 路径中的动态部分绑定到方法参数上。它支持多种类型,包括基本数据类型和自定义类型。

3.2 使用场景

  • 处理 RESTful 风格的 URL 路径参数。
  • 清晰地表示资源之间的层次结构和关系。

3.3 具体代码示例

3.3.1 使用单个路径变量
 

java

@RestController public class UserController { @GetMapping("/users/{id}") public ResponseEntity<String> getUser(@PathVariable("id") Long userId) { return new ResponseEntity<>("User ID: " + userId, HttpStatus.OK); } }

请求示例:

 

bash

curl http://localhost:8080/users/42

返回结果:

 

User ID: 42

3.3.2 使用多个路径变量
 

java

@RestController public class OrderController { @GetMapping("/users/{userId}/orders/{orderId}") public ResponseEntity<String> getOrder(@PathVariable Long userId, @PathVariable Long orderId) { return new ResponseEntity<>("User ID: " + userId + ", Order ID: " + orderId, HttpStatus.OK); } }

请求示例:

 

bash

curl http://localhost:8080/users/42/orders/101

返回结果:

 

User ID: 42, Order ID: 101

3.3.3 使用路径变量和请求参数
 

java

@RestController public class ProductController { @GetMapping("/products/{productId}") public ResponseEntity<String> getProduct(@PathVariable Long productId, @RequestParam(required = false) String version) { if (version == null) { return new ResponseEntity<>("Product ID: " + productId, HttpStatus.OK); } return new ResponseEntity<>("Product ID: " + productId + " (version: " + version + ")", HttpStatus.OK); } }

请求示例:

 

bash

curl http://localhost:8080/products/123?version=2

返回结果:

 

Product ID: 123 (version: 2)

相关文章:

Spring MVC 注解详解:@RequestBody,@RequestParam 和 @PathVariable

Spring MVC 提供了一系列注解&#xff0c;用于简化请求数据的获取和处理。了解并掌握这些注解的使用&#xff0c;对于开发RESTful API和处理HTTP请求至关重要。本文将详细介绍 RequestBody&#xff0c;RequestParam 和 PathVariable 注解&#xff0c;并附带具体的代码示例&…...

MySQL 8 中的 sql_mode

MySQL 8 中的 sql_mode 设置&#xff1a;提升数据库安全性与性能 在现代数据库管理中&#xff0c;MySQL 是一个广泛使用的开源关系型数据库。随着数据的增长和复杂性增加&#xff0c;良好的数据库配置显得尤为重要。sql_mode 是 MySQL 提供的一个强大功能&#xff0c;它可以帮…...

13种pod的状态

13种pod的状态 生命周期 Pending:Pod被创建后进入调度阶段,k8s调度器依据pod声明的资源请求量和调度规则,为pod挑选一个适合运行的节点。当集群节点不满足pod调度需求时,pod将会处于pending状态。Running:Pod被调度到节点上,k8s将pod调度到节点上后,进入running状态。S…...

2025考研今天开始预报名!攻略请查收

2025年全国硕士研究生招生考试 今天起开始预报名 有什么流程&#xff1f;需要准备哪些信息&#xff1f; 这份考研报名攻略速查收 ↓↓↓ 全国硕士研究生招生考试报名包括网上报名和网上确认两个阶段&#xff1a; 网上预报名时间为10月9日至10月12日&#xff08;每日9&#xff1…...

JS中的Promise经典题目解析

这段代码很有代表性&#xff0c;涵盖了多个 JavaScript 知识点&#xff0c;特别是不同异步操作的执行优先级。 async function async1() {console.log(async1 start);await async2();console.log(async1 end); }async function async2() {console.log(async2); }console.log(s…...

【机器学习】金融预测 —— 风险管理与股市预测

我的主页&#xff1a;2的n次方_ 在金融领域&#xff0c;机器学习&#xff08;ML&#xff09;已经成为了不可或缺的工具。金融预测&#xff0c;尤其是风险管理和股市预测&#xff0c;涉及海量数据和复杂模式的分析&#xff0c;而这些正是机器学习擅长处理的领域。通过分析历…...

Bootstrap 5 分页组件使用教程

Bootstrap 5 分页组件使用教程 引言 Bootstrap 5 是一个流行的前端框架,它提供了一套丰富的组件和工具,用于快速开发响应式和移动优先的网页。分页组件是 Bootstrap 5 中用于分割长列表或数据集的重要部分,它可以帮助用户更容易地浏览内容。本文将详细介绍如何在您的项目中…...

Linux 安装 NVM 并配置 npm 加速,开发 node 项目不再愁

由于需要在 linux 机器上完成 node 项目的构建&#xff0c;需要安装 nodejs, 想着不同项目需要使用不同的版本&#xff0c;索性安装一下 nvm 吧&#xff0c;因为之前在 windows 上已经安装过 nvm-windows, 应该很容易上手&#xff0c;我尝试了官网提供的几种方式&#xff0c;最…...

MySQL 多条件查询

在 MySQL 中&#xff0c;多条件查询通常使用 WHERE 子句来指定多个条件。这些条件可以通过逻辑运算符&#xff08;如 AND、OR、NOT&#xff09;进行组合&#xff0c;以实现复杂的查询需求。以下是一些常见的多条件查询示例&#xff1a; 使用 AND 运算符 AND 运算符用于组合多…...

深度学习模型

1. 引言 在过去的十年间&#xff0c;深度学习的崛起引发了人工智能领域的革命&#xff0c;深刻影响了多个行业。深度学习是一种模仿人脑神经元的工作方式&#xff0c;通过多层神经网络进行数据处理与特征学习。其应用范围从简单的图像识别到复杂的自然语言处理、自动驾驶和医疗…...

Nexpose 6.6.271 发布下载,新增功能概览

Nexpose 6.6.271 for Linux & Windows - 漏洞扫描 Rapid7 Vulnerability Management, release Sep 26, 2024 请访问原文链接&#xff1a;https://sysin.org/blog/nexpose-6/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.or…...

SimpleRAG-v1.0.3:增加文件对话功能

Kimi上有一个功能&#xff0c;就是增加文件之后对话&#xff0c;比如我有如下一个私有文档&#xff1a; 会议主题&#xff1a;《如何使用C#提升工作效率》 参会人员&#xff1a;张三、李四、王五 时间&#xff1a;2024.9.26 14:00-16:00 会议内容&#xff1a; 1. 自动化日常任…...

数学建模算法与应用 第7章 数理统计与方法

目录 7.1 参数估计与假设检验 Matlab代码示例&#xff1a;均值的假设检验 7.2 Bootstrap方法 Matlab代码示例&#xff1a;Bootstrap估计均值的置信区间 7.3 方差分析 Matlab代码示例&#xff1a;单因素方差分析 7.4 回归分析 Matlab代码示例&#xff1a;线性回归 7.5 基…...

【网络】洪水攻击防御指南

洪水攻击防御指南 摘要&#xff1a; 本文深入探讨了洪水攻击的概念、危害以及防御策略。通过Java技术实现&#xff0c;我们将学习如何通过编程手段来增强服务器的安全性。文章不仅提供了详细的技术解读&#xff0c;还包含了实用的代码示例和流程图&#xff0c;帮助读者构建一个…...

应对Redis大Key挑战:从原理到实现

在使用Redis作为缓存或数据存储时&#xff0c;开发者可能会遇到大Key&#xff08;Big Key&#xff09;问题。大Key是指在Redis中存储的单个键值对&#xff0c;其值的大小非常大&#xff0c;可能包含大量数据或占用大量内存。大Key问题会导致性能下降、内存消耗过多以及其他潜在…...

网络安全的全面指南

目录 网络安全的全面指南1. 引言2. 网络安全的基本概念3. 网络安全框架4. 常见网络安全攻击及案例4.1 病毒与恶意软件攻击案例4.2 钓鱼攻击案例4.3 DDoS 攻击案例 5. 网络安全最佳实践5.1 强密码策略5.2 定期更新和补丁管理5.3 数据备份与恢复策略 6. 企业网络安全策略6.1 安全…...

前端性能优化全面指南

前端性能优化是提升用户体验的关键&#xff0c;页面加载速度、响应时间和交互流畅度直接影响用户的留存率和满意度。以下是常用的前端性能优化方法&#xff0c;从网络层、资源加载、JavaScript 执行、渲染性能等方面进行全方位优化。 减少 HTTP 请求 合并文件&#xff1a;将多…...

JavaScript-API(倒计时的实现)

基础知识 1.时间对象的使用 1.1 实例化 要获取一个时间首先需要一个关键词new了实例化 const time new Date&#xff08;&#xff09; 如果是获取具体的具体的时间 const time new Date(2024-6-1 16:06:44) 1.2 日期对象方法 方法作用说明getFullYear()获得年份获得4…...

【C++】——继承【上】

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;Yan. yan.                        …...

SpringBoot 整合 阿里云 OSS图片上传

一、OOS 简介 ‌阿里云OSS&#xff08;Object Storage Service&#xff09;是一种基于云存储的产品&#xff0c;适用于存储和管理各种类型的文件&#xff0c;包括图片、视频、文档等。‌ 阿里云OSS具有高可靠性、高可用性和低成本等优点&#xff0c;因此被广泛应用于各种场景&…...

Linux配置静态ip地址和Oracle VM VirtualBox导入/导出虚拟机Centos7

导入虚拟机选择管理 - 导入虚拟电脑找到自己的虚拟机位置修改内存大小&#xff0c;默认虚拟机电脑位置&#xff0c;MAC地址等导入后点击设置如下图&#xff1a;修改网络-网 -- 卡1&#xff0c;其他基本不需要修改桥接网络选好网卡接入网线&#xff1b;设置好网络以后使用命令重…...

PHY芯片寄存器设计揭秘:从5位地址到分页扩展的演进史

PHY芯片寄存器设计演进&#xff1a;从5位地址到分页扩展的技术革命 当我们在享受千兆以太网带来的高速数据传输时&#xff0c;很少有人会想到这背后隐藏着一场持续了数十年的寄存器架构演进。PHY芯片作为网络通信的物理层核心&#xff0c;其寄存器设计经历了从简单固定到复杂可…...

别再写死代码了!用MCP Tool模块5分钟搞定AI与数据库的安全对话

别再写死代码了&#xff01;用MCP Tool模块5分钟搞定AI与数据库的安全对话 当AI模型需要与数据库交互时&#xff0c;开发者常面临两难选择&#xff1a;要么直接暴露数据库连接信息&#xff0c;要么编写大量胶水代码。这两种方案都存在明显缺陷——前者带来安全隐患&#xff0c;…...

RMBG-2.0企业级应用:集成至Shopify后台实现订单图自动去背流水线

RMBG-2.0企业级应用&#xff1a;集成至Shopify后台实现订单图自动去背流水线 想象一下&#xff0c;你是一家Shopify店铺的运营负责人。每天&#xff0c;团队需要处理上百张来自不同供应商的商品图片&#xff0c;手动抠图、换背景&#xff0c;只为让商品主图在网站上看起来统一…...

IPXWrapper终极指南:三步让Windows 11完美运行经典游戏联机对战

IPXWrapper终极指南&#xff1a;三步让Windows 11完美运行经典游戏联机对战 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 还在为Windows 11无法运行《红色警戒2》、《星际争霸》等经典游戏而烦恼吗&#xff1f;IPXWrapper正是…...

别再死记硬背GAT公式了!用Python+PyTorch手把手图解注意力机制(附代码)

图解GAT&#xff1a;用PythonPyTorch拆解图注意力机制的实现奥秘 当你第一次听说图注意力网络&#xff08;GAT&#xff09;时&#xff0c;是否被那些复杂的数学公式和抽象概念吓退&#xff1f;本文将以全新的可视化方式&#xff0c;带你从零实现一个完整的GAT层&#xff0c;用代…...

告别手动操作!Open-AutoGLM让iPhone听懂人话,自动执行指令

告别手动操作&#xff01;Open-AutoGLM让iPhone听懂人话&#xff0c;自动执行指令 1. 引言 你是否厌倦了每天重复点击手机屏幕的操作&#xff1f;是否希望手机能像真人助理一样理解你的需求并自动完成任务&#xff1f;今天我要介绍的Open-AutoGLM正是这样一个革命性的AI手机智…...

融合多尺度特征与注意力机制的YOLOv5红外小目标检测优化方案

1. 红外小目标检测的技术挑战 红外遥感图像中的小目标检测一直是计算机视觉领域的难点问题。与可见光图像相比&#xff0c;红外图像具有低对比度、高噪声、目标尺寸小等特点&#xff0c;这使得传统检测算法难以取得理想效果。在实际应用中&#xff0c;军事侦察中的无人机识别、…...

Qwen3-ForcedAligner-0.6B在语音克隆中的应用:精准音素对齐技术

Qwen3-ForcedAligner-0.6B在语音克隆中的应用&#xff1a;精准音素对齐技术 1. 引言 你有没有遇到过这样的情况&#xff1a;用语音克隆技术生成的声音&#xff0c;听起来总感觉哪里不对劲&#xff1f;可能是某个字的发音时长不对&#xff0c;或者是词语之间的停顿不自然。这些…...

vscode|无法连接到远程扩展主机服务器 (错误: CodeError(AsyncPipeFailed(Os { code: 2, kind: NotFound, message: “No such

无法连接到远程主机服务器&#xff08;错误&#xff1a; CodeError(AsyncPipeFailed(Os { code: 2, kind: NotFound, message: "No such file or directory" })))这是一个典型的 VSCode Remote-SSH 连接失败 错误。虽然本地网络正常、服务器在线&#xff0c;但 VSCod…...