@RequestParam、@RequestBody、@PathVariable

1. @RequestParam

  • @RequestParam:get请求时如果用不到它的3个属性,可以省略;其他请求如果是通过param传送数据,必须使用该注释
  • 要点:
    1. 可用于任何类型的请求(get请求数据在请求行中, post请求数据在请求体中)
    2. 无论时在请求行还是请求体,格式都是:username=zhangsan&password=1234&email=zhangsan@powernode.com

属性

  • value: 不解释看代码
  • defaultValue :设置默认值
// 发送请求
request.get("/user"{params:{	// 必须使用paramspeopleAge: 20,	}
})@GetMapping("/user")
// value属性 :指明发送时url中的名字,和这里的名字做对应,peopleAge对应 age
public String getUser(@RequestParam(value = "peopleAge", defaultValue = "18") int age) {return "Your age is " + age;
}
  • required :是否必须传
@GetMapping("/user")
public String getUser(@RequestParam(required = false) String email) {if (email != null) {return "Your email is " + email;} else {return "No email provided.";}
}

2. @RequestBody

  • @RequestBody: 最主要的用处,post请求时前端发送json格式字符串,后端用类接收
  • 用法
    1. 可用于非get请求的其他请求
    2. 前端发送的是json字符串,后端用类接收
    3. @RequestBody不可以省略
    4. required属性:是否必需传
@PostMapping("/user/{id}")
public String updateUser(@RequestBody User user) {// 根据id更新用户信息return "User updated successfully.";
}
  • 请求
import axios from 'axios';// 假设后端接口地址
const baseUrl = 'http://localhost:8080';// 要发送的数据
const userData = {// 假设User类有name和age属性,根据实际情况修改name: 'John Doe',age: 30
};// 发送POST请求的函数
const sendPostRequest = async () => {try {//  虽然没有在请求头中指明发送的是json格式,只要使用post请求,就会自动对第二个参数进行json格式化const response = await axios.post(`/user`, userData);console.log('请求成功', response.data);} catch (error) {console.error('请求失败', error);}
};// 调用函数发送请求
sendPostRequest();

3. @PathVariable

  • @PathVariable:发送Rest风格请求时使用

作用:

  1. Rest风格请求的占位符
  2. 可用于任何请求中,get、post、put等等
  3. 也有required 属性

1. 基本使用

/users/123 //请求的url@GetMapping("/users/{userId}")
public String getUserById(@PathVariable("userId") Long id) {// 根据id从数据库或其他数据源获取用户信息return "User with id " + id + " retrieved successfully.";
}
/orders/100/items/200 // 亲求的url,多个@GetMapping("/orders/{orderId}/items/{itemId}")
public String getOrderItem(@PathVariable("orderId") Long orderId, @PathVariable("itemId") Long itemId) {// 根据orderId和itemId获取订单中的商品信息return "Retrieving item " + itemId + " from order " + orderId;
}

2. 与正则表达式配合使用

@GetMapping("/users/{userId:\\d+}")
public String getUserById(@PathVariable("userId") String userId) {// 这里可以确保userId是数字格式return "User with id " + userId + " retrieved successfully.";
}

4. 遇到的其他情况

特别注意顺序,发送时参数的顺序和接收时参数的顺序

1. get请求发送数据,后端用类接收

  • get请求发送了4个参数
  request.get("/admin/list",{params:{currentPage:1,pageSize:10,username:"zhangsan",name:"张三",}})
  • controller接收
public class AdminController {@GetMapping("/list")public Result<PageResult> getAdminList(// 参数按顺序接收,这里设置了默认值@RequestParam(defaultValue = "1") Integer currentPage,@RequestParam(defaultValue = "10") Integer pageSize,// 第3个和第4个参数赋值给了admin类对象Admin admin) {PageInfo<Admin> adminList = adminService.getAdminList(currentPage, pageSize);return PageResult.ok(adminList);}
}

2. Post请求中@RequestParam和@RequestBody 一起使用

import axios from 'axios';
const baseUrl = 'http://localhost:8080'; 
const sendPostRequest = async () => {try {const response = await axios.post(`/user`, {// 请求体参数userInfo: {name: 'John Doe',age: 30}}, {// 查询参数params: {id: 123}});console.log('请求成功', response.data);} catch (error) {console.error('请求失败', error);}
};sendPostRequest();
@PostMapping("/user")
public String saveUser(@RequestParam("id") Long id,@RequestBody UserInfo userInfo) {// 保存用户逻辑return "User saved successfully.";
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/897989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

麒麟系统利用pycharm生成deb文件

在麒麟系统&#xff08;Kylin OS&#xff09;上使用 PyCharm 进行 Python 开发并生成 .deb 可安装软件包&#xff0c;可以按照以下步骤进行操作&#xff1a; 1. 准备工作 安装 PyCharm&#xff1a;确保已经在麒麟系统上安装了 PyCharm&#xff0c;可以使用官方提供的安装包进…

微信小程序接入DeepSeek模型(火山方舟),并在视图中流式输出

引言&#xff1a; DeepSeek&#xff0c;作为一款先进的自然语言处理模型&#xff0c;以其强大的文本理解和生成能力著称。它能够处理复杂的文本信息&#xff0c;进行深度推理&#xff0c;并快速给出准确的回应。DeepSeek模型支持流式处理&#xff0c;这意味着它可以边计算边输…

钉钉(excel)能让表格中不是‘北京’的字符串自动加亮显示(方便查看)以及隔行填充严颜色是斑马色(方便查看)嘛

在钉钉在线表格中&#xff0c;虽然功能相对Excel有所简化&#xff0c;但仍然可以通过条件格式实现对特定内容的高亮显示。以下是具体步骤&#xff1a; 一、在钉钉在线表格中设置条件格式 1. 打开钉钉在线表格 登录钉钉&#xff0c;进入“钉钉在线表格”应用。 打开你需要操作…

Windows根据文件名批量在文件夹里查找文件并复制出来,用WPF实现的详细步骤

项目前言 在日常工作和生活中&#xff0c;我们常常会遇到需要从大量文件中根据文件名批量查找特定文件并复制到指定位置的情况。手动一个个查找和复制文件不仅效率低下&#xff0c;还容易出错。使用 Windows Presentation Foundation (WPF) 可以创建一个用户友好的图形界面应用…

PHP语法基础

PHP语法基础 一&#xff0c;变量 在PHP中&#xff0c;变量是存储数据的容器&#xff0c;其灵活性和动态类型系统是PHP的核心特性之一。以下是PHP变量的详细解析&#xff0c;涵盖声明、作用域、类型转换及最佳实践&#xff1a; 1. 变量基础 声明与命名规则 无需显式声明类型&…

Java 并发编程——BIO NIO AIO 概念

参考 Java 并发编程——BIO NIO AIO 概念 阻塞与非阻塞、同步与异步概念 系统调用、缓存、物理设备阻塞与非阻塞同步与异步 四种主要的 IO 模型 同步阻塞 IO同步非阻塞 IOIO 多路复用异步 IO select&#xff0c;poll&#xff0c;epoll 系统调用命令

探索Maas平台与阿里 QWQ 技术:AI调参的魔法世界

摘要&#xff1a;本文介绍了蓝耘 Maas 平台在人工智能领域的表现及其核心优势&#xff0c;包括强大的模型支持、高效的资源调度和友好的操作界面。文章还探讨了蓝耘 Maas 平台与阿里 QWQ 技术的融合亮点及应用拓展实例&#xff0c;并提供了调参实战指南&#xff0c;最后对蓝耘 …

Python 实现大文件的高并发下载

项目背景 基于一个 scrapy-redis 搭建的分布式系统&#xff0c;所有item都通过重写 pipeline 存储到 redis 的 list 中。这里我通过代码演示如何基于线程池 协程实现对 item 的中文件下载。 Item 结构 目的是为了下载 item 中 attachments 保存的附件内容。 {"crawl_tim…

MySQL与Canal、RabbitMQ集成指南

MySQL 部分 1. 查看是否开启 binlog MySQL 8 默认开启 binlog。可以通过以下命令查看是否开启&#xff1a; SHOW VARIABLES LIKE log_bin;如果返回结果为 ON&#xff0c;则表示 binlog 已开启。 Variable_nameValuelog_binON 2. 若未开启 binlog&#xff0c;则需手动配置 …

X86 RouterOS 7.18 设置笔记十:上海电信IPTV使用msd_lite实现组播转单拨

X86 j4125 4网口小主机折腾笔记五&#xff1a;PVE安装ROS RouterOS X86 RouterOS 7.18 设置笔记一&#xff1a;基础设置 X86 RouterOS 7.18 设置笔记二&#xff1a;网络基础设置(IPV4) X86 RouterOS 7.18 设置笔记三&#xff1a;防火墙设置(IPV4) X86 RouterOS 7.18 设置笔记四…

Select 选择器选项位置偏移的解决方案

Select 选择器选项位置偏移的解决方案 在使用 Select 组件时&#xff0c;可能会遇到下拉选项位置偏移的问题。这通常由 CSS 样式、组件 渲染方式 或 父级元素的影响 造成。以下是详细的排查步骤和解决方案。 一、常见原因 position: relative; 或 overflow: hidden; 影响下拉菜…

LeetCode 解题思路 17(Hot 100)

解题思路&#xff1a; 找到链表中点&#xff1a; 使用快慢指针法&#xff0c;快指针每次移动两步&#xff0c;慢指针每次移动一步。当快指针到达末尾时&#xff0c;慢指针指向中点。递归分割与排序&#xff1a; 将链表从中点处分割为左右两个子链表&#xff0c;分别对这两个子…

数学建模历程之初见

第一次接触数学建模是在上大学前&#xff0c;当时只是听过。起源于我在大学的老乡群里聊天&#xff0c;由于当时年轻有点傻&#xff0c;说的话太多了&#xff0c;什么都问哈哈哈哈哈。 后来有个学长从老乡群里加我&#xff0c;问我怎么话那么多&#xff0c;你们懂当时对我幼小…

Python 科学计算与机器学习入门:NumPy + Scikit-Learn 实战指南

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…

「自动驾驶背后的数学:从传感器数据到控制指令的函数嵌套」—— 揭秘人工智能中的线性函数、ReLU 与复合函数

引言 自动驾驶技术是人工智能领域的一个重要应用&#xff0c;其核心在于如何将传感器数据转化为车辆控制指令。这一过程涉及大量的数学知识&#xff0c;包括线性函数、激活函数&#xff08;如 ReLU&#xff09;以及复合函数的嵌套使用。本文将深入探讨自动驾驶中的数学原理&am…

详解SQL数据定义功能

数据定义 1. 数据库模式&#xff08;Schema&#xff09;的定义与删除定义模式删除模式 2. 基本表的定义、修改与删除定义表约束1. NOT NULL 约束2. DEFAULT 约束3. UNIQUE 约束4. PRIMARY KEY 约束多列主键示例&#xff1a; 5. FOREIGN KEY 约束6. CHECK 约束7. AUTO_INCREMENT…

Redis超高并发分key实现

Redis扛并发的能力是非常强的&#xff0c;所以高并发场景下经常会使用Redis&#xff0c;但是Redis单分片的写入瓶颈在2w左右&#xff0c;读瓶颈在10w左右&#xff0c;如果在超高并发下即使是集群部署Redis&#xff0c;单分片的Redis也是有可能扛不住的&#xff0c;如下图所示&a…

AI Agent 时代开幕-Manus AI与OpenAI Agent SDK掀起新风暴

【本周AI新闻: AI Agent 时代开幕-Manus AI与OpenAI Agent SDK掀起新风暴】 https://www.bilibili.com/video/BV1bkQyYCEvQ/?share_sourcecopy_web&vd_source32ed33e1165d68429b2e2eb4749f3f26 最近AI圈子里最火的话题非Manus莫属&#xff01;这款由中国武汉创业公司“蝴…

多时间尺度的配电网深度强化学习无功优化策略的Python示例代码框架

以下是一个简单的多时间尺度的配电网深度强化学习无功优化策略的Python示例代码框架&#xff0c;用于帮助你理解如何使用深度强化学习&#xff08;以深度Q网络 DQN 为例&#xff09;来处理配电网的无功优化问题。在实际应用中&#xff0c;你可能需要根据具体的配电网模型和需求…

剑指 Offer II 081. 允许重复选择元素的组合

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20081.%20%E5%85%81%E8%AE%B8%E9%87%8D%E5%A4%8D%E9%80%89%E6%8B%A9%E5%85%83%E7%B4%A0%E7%9A%84%E7%BB%84%E5%90%88/README.md 剑指 Offer II 081. 允许重复选择…