Spring中常用的请求处理携带参数的注解@RequestBody、@RequestParam和 @PathVariable

news/2024/12/29 1:26:19/

当在 Spring 框架中进行 Web 开发时,@RequestBody、@RequestParam 和 @PathVariable是常用的注解,用于处理不同类型的请求参数。

当在 Spring 框架中进行 Web 开发时,@RequestBody@RequestParam@PathVariable 是常用的注解,用于处理不同类型的请求参数。

1.@RequestBody 注解:

@RequestBody 注解通常用于将 HTTP 请求的请求体(request body)绑定到方法参数上。它可以将传递的 JSON、XML 或其他媒体类型的请求体转换为对应的 Java 对象。一般在 POST 或 PUT 请求中使用,用于接收客户端发送的数据。

示例:

@PostMapping("/create")
public ResponseEntity<?> create(@RequestBody User user) {// 处理用户创建请求,user为请求体中的JSON对象转换的User对象// ...
}

携带请求体的 POST 请求:

javascript

let user = {name: 'John',age: 25
};
axios.post('/users', user)//("你的请求路径",请求携带的参数).then(response => {// 处理返回的数据}).catch(error => {// 处理错误});

在这个示例中,我们使用 axios 发送了一个 POST 请求,并将用户对象作为请求的数据直接发送给后端。

2.@RequestParam 注解:

@RequestParam 注解用于从请求的 URL 或查询参数中提取单个请求参数值。它可以指定参数的名称、是否必需、默认值等。一般用于处理 GET 请求的查询参数或 POST 请求的表单参数。

@GetMapping("/user")
public ResponseEntity<?> getUser(@RequestParam("id") Long userId) {// 根据userId获取用户信息// ...
}

2.1 我之前在比如微信向程序中发送请求使用的是URL的GET请求方式。

    wx.request({method:"GET",url: `http://localhost:8080/sfzy_applet_ssm/courseCollection/selectCourse`,data: {userId: app.globalData.userInfo.userId},success(resp) {// console.log(resp);_this.setData({payedCourseList: resp.data.data.courseList})app.delListImgSrc(_this, resp.data.data,"payedCourseList");}})

3.@PathVariable 注解:

@PathVariable 注解用于从请求的路径中提取动态的路径参数。路径参数是 URL 中以占位符形式表示的变量。一般用于 RESTful 风格的接口中,用于传递资源的唯一标识符或其他相关参数。

@GetMapping("/user/{id}")
public ResponseEntity<?> getUserById(@PathVariable("id") Long userId) {// 根据userId获取用户信息// ...
}

如果你使用 Vue.js 来发送请求并携带路径参数或查询参数,以下是一些示例:

携带路径参数的 GET 请求:

javascript

let userId = 123;
axios.get(`/users/${userId}`).then(response => {// 处理返回的数据}).catch(error => {// 处理错误});

在这个示例中,我们使用 axios 库发送 GET 请求,并通过模板字符串将用户ID作为路径参数拼接到 URL 中。

为什么有时候需要使用其他注解,而不仅限于 @RequestBody@RequestParam@PathVariable 呢?这是因为不同的注解提供了更灵活的参数处理方式,适应不同的请求场景和需求。比如:

  • @RequestHeader:用于获取 HTTP 请求头中的值。
  • @CookieValue:用于获取 HTTP 请求中的 Cookie 值。
  • @ModelAttribute:用于将请求参数绑定到模型对象。
  • 等等。

根据具体的业务需求和请求参数类型,选择合适的注解来处理请求参数,以便更方便地获取和处理请求数据。

4.例如以下这个方式

携带查询参数的 GET 请求:

javascript

let page = 1;
let size = 10;
axios.get('/users', {params: {page: page,size: size}
}).then(response => {// 处理返回的数据}).catch(error => {// 处理错误});

在这个示例中,我们通过在 params 对象中设置查询参数来传递 pagesize 参数的值。

4.1URL 查询参数(Query Parameters):将查询参数直接附加在 URL 后面,使用?&进行连接。例如:/users?page=2&size=10

  • @GetMapping("/users")
    public ResponseEntity<List<User>> getUsers(@RequestParam("page") int page, @RequestParam("size") int size) {// 处理逻辑
    }
    

    在这种情况下,可以使用@RequestParam注解来获取查询参数。

4.2请求体中的 JSON 参数:将查询参数封装在请求体中作为 JSON 数据发送。

例如:

  • json

{"page": 2,"size": 10
}

java

@PostMapping("/users")
public ResponseEntity<List<User>> getUsers(@RequestBody UserRequest request) {int page = request.getPage();int size = request.getSize();// 处理逻辑
}

在这种情况下,可以使用@RequestBody注解来将请求体的 JSON 数据映射到自定义的请求对象(UserRequest)中,然后从该请求对象中获取查询参数。

上述我所提供的一些示例可以参考,在 Vue.js 中使用 axios 库发送请求时,如何携带路径参数、查询参数以及请求体。你可以根据具体需求,结合 Vue.js 的语法和功能,对 URL 进行拼接和参数传递。


http://www.ppmy.cn/news/1100629.html

相关文章

ScheduledThreadPoolExecutor 类

ScheduledThreadPoolExecutor 是 java.util.concurrent 包中的一个类,它是 ScheduledExecutorService 接口的一个具体实现,用于支持按计划执行任务,例如定时任务或周期性任务。以下是关于 ScheduledThreadPoolExecutor 类的一些重要信息和示例: 创建 ScheduledThreadPoolEx…

力扣(LeetCode)算法_C++—— 存在重复元素

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 &#xff0c;返回 true &#xff1b;如果数组中每个元素互不相同&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,1] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;nums …

vcruntime140.dll找不到要怎么解决?修复vcruntime140.dll的方法分享

最近挺多朋友反映说vcruntime140.dll找不到&#xff0c;不知道要怎么去解决&#xff0c;其实这一类的问题&#xff0c;之前就说过很多次了&#xff0c;首先vcruntime140.dll就是一个dll文件&#xff0c;所以它的解决方法都是差不多的&#xff0c;好了&#xff0c;今天就再来给大…

使用playright自动下载vscode已安装插件

import os import re import subprocess import traceback from playwright.sync_api import Playwright, sync_playwright, expect# 执行CMD命令 cmd_command "code --list-extensions" # 获取已安装扩展列表 process subprocess.Popen(cmd_command, stdoutsubpr…

linux下shell脚本实现wordpress搭建

wordpress_auto_install.sh #!/bin/bashuser$(whoami)function wordpress_auto_install () { if [ $user "root" ];thenecho "前提&#xff1a;调整系统配置&#xff0c;如关闭selinux、firewall等&#xff01;"sed -i s/SELINUXenforcing/SELINUXdis…

【uni-app】—3.新建一个uni-app项目

一、新建uni-app项目 1. 打开HBuilder X 2. 新建项目 3. 配置项目信息 4. 安装Sass 插件 &#xff08;因为项目需要&#xff09; 这里需要登录&#xff0c;自行用邮箱注册登录&#xff0c;再下载安装插件&#xff0c;安装完成如下 二、项目目录扩展 1. 初始化项目目录 2. 扩…

Linux高性能服务器编程 学习笔记 第一章 TCP/IP协议族

现在Internet使用的主流协议族是TCP/IP协议族&#xff0c;它是一个分层、多协议的通信体系。 TCP/IP协议族包含众多协议&#xff0c;我们只详细讨论IP协议和TCP协议&#xff0c;因为它们对编写网络应用程序有最直接的影响。如果想系统学习网络协议&#xff0c;RFC&#xff08;…

【多线程】Thread 类 详解

Thread 类 详解 一. 创建线程1. 继承 Thread 类2. 实现 Runnable 接口3. 其他变形4. 多线程的优势-增加运行速度 二. Thread 类1. 构造方法2. 常见属性3. 启动线程-start()4. 中断线程-interrupt()5. 线程等待-join()6. 线程休眠-sleep()7. 获取当前线程引用 三. 线程的状态1. …