SpringBoot六种API请求参数读取方式

SpringBoot六种API请求参数读取方式

同步请求和异步请求

  • 同步: 指单线程依次做几件事
  • 异步: 指多线程同时做几件事

同步请求: 指客户端浏览器只有一个主线程, 此线程负责页面的渲染和发出请求等操作, 如果此主线程发出请求的话则停止渲染而且会清空页面显示的内容 直到服务器响应了数据后才能再次显示, 由于主线程清空了原有显示的内容所以只能实现页面的整体刷新(整体改变)

异步请求: 指客户端的主线程只负责页面渲染相关操作,发请求的事由新的子线程操作, 这样子线程发出请求时页面不需要清空,而且可以将查询回来的数据展示在原有页面基础之上, 这样实现的效果就叫做页面的局部刷新

客户端发出请求的几种方式

  • 通过浏览器的地址栏中发出请求 同步请求

  • 通过html页面中的超链接发出请求 同步请求

  • 通过html页面中的form表单发出请求 同步请求

  • 通过前端框架发出请求 异步请求

HTTP请求

  • 请求地址
  • 请求方法
  • 状态码
  • 同源策略
  • 请求头
  • 响应头

HTTP状态码


| 序号 | 方法   | 描述                                                         |
| ---- | ------ | ------------------------------------------------------------ |
| 1    | GET    | 用于请求服务器发送某个资源。GET请求不应该对服务器上的资源做出任何更改,并且应该是幂等的(即多次重复的请求应该产生相同的结果)。例如,当你在浏览器中输入URL地址时,浏览器会发送一个GET请求来获取该URL对应的网页。 |
| 2    | HEAD   | 类似于GET请求,但服务器不返回请求的资源主体,只返回响应头。HEAD请求通常用于获取资源的元信息,如资源的大小、类型等,而不需要获取资源的实际内容。 |
| 3    | POST   | 用于向服务器提交数据,通常用于提交表单或上传文件。POST请求可能会导致服务器上的状态更改,并且不一定是幂等的。例如,在提交注册表单时,浏览器通常会发送一个POST请求,将用户提供的信息发送到服务器进行处理。 |
| 4    | PUT    | 用于向服务器上传资源,通常用于更新已存在的资源或创建新的资源。PUT请求应该是幂等的,即多次执行相同的PUT请求应该产生相同的结果。 |
| 5    | DELETE | 用于请求服务器删除指定的资源。DELETE请求应该是幂等的,即多次执行相同的DELETE请求应该产生相同的结果。 |
| 6    | CONNECT | 用于建立到服务器上指定端口的隧道,通常用于代理服务器。 |
| 7    | OPTIONS | 用于请求服务器返回支持的HTTP方法和其他选项。例如,客户端可以发送OPTIONS请求来确定服务器支持哪些CORS(跨域资源共享)策略。 |
| 8    | TRACE  | 回显服务器收到的请求,主要用于测试或诊断。               |
| 9    | PATCH  | 用于在请求-响应链上的每个节点获取传输路径。PATCH请求通常用于调试和测试,以查看请求在经过各种代理服务器和中间件时如何被修改。 |

HTTP响应头信息


| 响应头信息(英文) | 响应头信息(中文) | 描述                                                                 |
|-------------------|--------------------|----------------------------------------------------------------------|
| Date              | 日期               | 响应生成的日期和时间。例如:Wed, 18 Apr 2024 12:00:00 GMT          |
| Server            | 服务器             | 服务器软件的名称和版本。例如:Apache/2.4.1 (Unix)                |
| Content-Type      | 内容类型           | 响应体的媒体类型(MIME类型),如text/html; charset=UTF-8, application/json等。|
| Content-Length    | 内容长度           | 响应体的大小,单位是字节。例如:3145                             |
| Content-Encoding  | 内容编码           | 响应体的压缩编码,如 gzip, deflate等。                         |
| Content-Language  | 内容语言           | 响应体的语言。例如:zh-CN                                        |
| Content-Location  | 内容位置           | 响应体的 URI。例如:/index.html                                 |
| Content-Range     | 内容范围           | 响应体的字节范围,用于分块传输。例如:bytes 0-999/8000          |
| Cache-Control     | 缓存控制           | 控制响应的缓存行为, 如 no-cache 表示必须重新请求。            |
| Connection        | 连接               | 管理连接的选项,如keep-alive或close,keep-alive 表示连接不会在传输后关闭。|
| Set-Cookie        | 设置 Cookie        | 设置客户端的 cookie。例如:sessionId=abc123; Path=/; Secure      |
| Expires           | 过期时间           | 响应体的过期日期和时间。例如:Thu, 18 Apr 2024 12:00:00 GMT    |
| Last-Modified     | 最后修改时间       | 资源最后被修改的日期和时间。例如:Wed, 18 Apr 2024 11:00:00 GMT|
| ETag              | 实体标签           | 资源的特定版本的标识符。例如:"33a64df551425fcc55e6"           |
| Location          | 位置               | 用于重定向的 URI。例如:/newresource                            |
| Pragma            | 实现特定的指令     | 包含实现特定的指令,如 no-cache。                             |
| WWW-Authenticate  | 认证信息           | 认证信息,通常用于HTTP认证。例如:Basic realm="Access to the site" |
| Accept-Ranges     | 接受范围           | 指定可接受的请求范围类型。例如:bytes                        |
| Age               | 经过时间           | 响应生成后经过的秒数,从原始服务器生成到代理服务器。例如:24   |
| Allow             | 允许方法           | 列出资源允许的 HTTP 方法 。例如:GET, POST,HEAD等           |
| Vary              | 变化               | 告诉下游代理如何使用响应头信息来确定响应是否可以从缓存中获取。例如:Accept |
| Strict-Transport-Security | 严格传输安全 | 指示浏览器仅通过 HTTPS 与服务器通信。例如:max-age=31536000; includeSubDomains |
| X-Frame-Options   | 框架选项           | 控制页面是否允许在框架中显示,防止点击劫持攻击。例如:SAMEORIGIN |
| X-Content-Type-Options | 内容类型选项 | 指示浏览器不要尝试猜测资源的 MIME 类型。例如:nosniff      |
| X-XSS-Protection   | XSS保护            | 控制浏览器的 XSS 过滤和阻断。例如:1; mode=block           |
| Public-Key-Pins   | 公钥固定           | HTTP 头信息,用于HTTP公共密钥固定(HPKP),一种安全机制,用于防止中间人攻击。例如:pin-sha256="base64+primarykey"; pin-sha256="base64+backupkey"; max-age=expireTime |

Get请求和Post请求

从字面理解:Get是跟服务器要数据, Post是给服务器传数据

  • Get: 请求参数写在请求地址的后面(可见),请求参数有大小限制只能穿几k的数据(不能处理文件上传) 应用场景: 查询请求一般都会使用get, 删除也会使用get请求

  • Post:请求参数放在请求体里面(不可见),参数没有大小限制 应用场景: 文件上传, 带有敏感信息的请求(比如注册登录时有密码)

🌐 URL 简介

URL 是互联网上用于检索任何资源的机制,代表统一资源定位符(Uniform Resource Locator)。它就像一个给定资源在网络上的独特地址,理论上任何资源都可以通过 URL 进行访问。

💻 URL 的组成

一个完整的 URL 通常由以下几个部分组成:协议、域名、路径、查询参数和片段标识符。例如,在 URL https://www.example.com/path/to/resource?query=string#fragment中,https 是协议,www.example.com 是域名,/path/to/resource 是路径,query=string 是查询参数,#fragment 是片段标识符.

🌍 URL 的作用 URL

在互联网上扮演着至关重要的角色,它使我们能够访问和共享各种资源,例如网页、图片、视频、文档等。通过 URL,我们可以轻松地找到所需的信息,并与他人进行交流。

[参考地址](https://tangjiusheng.com/web/qdkf/598.html)
(https://www.bookstack.cn/read/html-tutorial/spilt.4.docs-url.md)

1.@RequestParam

  • 作用:取URL中的查询参数,@RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)
  • 使用场景:当需要从GET或POST请求的URL中读取参数时使用。
语法:@RequestParam(value=”参数名”,required=true/false,defaultValue=””)value:参数名required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值
步骤:
1、创建web工程、引入依赖
2、配置SpringMvc入口文件 --DispatcherServlet--为总调度、web.xml里配置
3、创建Springmvc.xml文件--理解为:适配器(这里不需要自已指定适配、springmvc会自动指定)--视图解析器
4、创建 业务处理器 Controller5、测试

https://blog.csdn.net/sswqzx/article/details/84195043

1/2/3上述步骤参考此博文

  • 目录结构

  • 基本使用
package com.ncist.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;/*** 功能:* 作者:兮和* 时间: 9:55*/
@RestController
public class WebController {@GetMapping("/search")public String searchUser(@RequestParam(value = "keyword", required = false) String keyword, Model model) {// 如果 keyword 参数存在,则打印它;否则,使用默认值String message = (keyword != null) ? "搜索关键词: " + keyword : "没有提供搜索关键词";System.out.println(message);// 将消息添加到模型中model.addAttribute("msg", message);return keyword;}
}

apifox测试结果

控制台打印测试结果

终端控制台打印结果

  • 指定默认值
@GetMapping("/items")
public String listItems(@RequestParam(value = "category", defaultValue = "all") String category) {// 如果请求中没有提供 category 参数,将使用默认值 "all"System.out.println("列出类别为 " + category + " 的项目");return "items";
}
http://localhost:9090/items?category=books

apifox测试结果

  • 允许为空
@PostMapping("/register")
public String registerUser(@RequestParam(value = "age", required = false) Integer age) {if (age != null) {System.out.println("注册用户年龄: " + age);} else {System.out.println("年龄未提供");}return "registration-success";
}
  • 请求参数的多个值
    @GetMapping("/book")public String getBookDetails(@RequestParam("authors") List<String> authors) {// authors 参数可以接收多个值System.out.println("书籍作者: " + authors);return "book-details";}
  • 请求参数的条件处理
@GetMapping("/feature")
public String toggleFeature(@RequestParam(value = "enable", required = false) Boolean enable) {if (enable != null && enable) {System.out.println("功能已启用");} else {System.out.println("功能未启用或未指定");}return "feature-status";
}

上述数据示例结果和上文一样,使用apifox进行项目测试,你会发现上述数据的变化情况

2.@PathVariable

  • 作用:从URL的路径中提取变量
    基本使用:
    使用 @PathVariable 可以捕获URL模板中的变量。例如,/users/{id} 路径中的 {id} 是一个路径变量,可以通过 @PathVariable(“id”) 来获取。

类型转换:
Spring MVC 会尝试将路径变量的字符串值转换为方法参数的类型。如果转换失败,会抛出 TypeMismatchException。

正则表达式限制:
可以在 @PathVariable 的 value 属性中使用正则表达式来限制变量的格式,如 @GetMapping(“/users/{id:\d+}”)。

可选参数:
通过在路径变量名称后添加 ? 或设置 required = false 属性,可以将路径变量设置为可选。

默认值:
使用 defaultValue 属性为路径变量提供默认值。

与 @RequestParam 同时使用:
可以在同一个方法中同时使用 @PathVariable 和 @RequestParam 来获取路径变量和查询参数。

   @PostMapping(value = "/item/{id}/{method}")public String getForm(@PathVariable("id") String itemId ,  @PathVariable("method") String methodCall , Model model){if(methodCall.equals("create")){//logic}if(methodCall.equals("update")){//logic}return "path to your form";}

参考地址:https://blog.csdn.net/weixin_45393094/article/details/108814901

3.@MatrixVariable

  • 作用:用于从URL的矩阵参数中读取值
@RequestMapping(value="{path}/simple", method=RequestMethod.GET)
public @ResponseBody String withMatrixVariable(@PathVariable String path, @MatrixVariable String foo) {return "Obtained matrix variable 'foo=" + foo + "' from path segment '" + path + "'";
}

4.@RequestBody

  • 作用:读取HTTP请求的body部分,通常用于接收JSON或XML格式的数据。
    http://www.itsoku.com/article/216
@PostMapping("/users")
public ResponseEntity<?> addUser(@RequestBody User user) {// 处理用户对象return ResponseEntity.ok().body(user);
}

5.@RequestHeader

  • 作用:@RequestHeader:用于读取HTTP请求的header部分。
@GetMapping("/user-agent")
public ResponseEntity<String> getUserAgent(@RequestHeader(value = "User-Agent", required = false, defaultValue = "Unknown") String userAgent) {return ResponseEntity.ok("User Agent: " + userAgent);
}

6.@CookieValue

  • 作用:用于读取HTTP请求中的cookie值。
@GetMapping("/cookie")
public String getCookieValue(@CookieValue(value = "sessionId", defaultValue = "noSession") String sessionId) {return "Session ID: " + sessionId;
}

补充三种:

  • 直接把请求参数写在方法的形参中

  • 封装一个bean直接来接收

  • 原生的HttpServletRequest接收

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

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

相关文章

前端html-docx实现html转word,并导出文件,文字+图片

前端html-docx实现html转word&#xff0c;并导出文件 前端web页面 有文字&#xff0c;有图片&#xff0c;保存web的css效果 使用工具&#xff1a;html-docx 官方网址&#xff1a;http://docs.asprain.cn/html-docx/readme.html 步骤&#xff1a; 1 npm install html-docx-js…

输入3个字符串,要求将字母按由小到大顺序输出

对于将3个整数按由小到大顺序输出&#xff0c;是很容易处理的。可以按照同样的算法来处理将3个字符串按大小顺序输出。可以直接写出程序。 编写程序&#xff1a; 运行结果&#xff1a; 这个程序是很好理解的。在程序中对字符串变量用关系运算符进行比较&#xff0c;如同对数值…

GUI 01:GUI 编程概述,AWT 相关知识,Frame 窗口,Panel 面板,及监听事件的应用

一、前言 记录时间 [2024-05-30] 疑问导航 GUI 是什么&#xff1f;GUI 如何使用&#xff1f;GUI 有哪些应用&#xff1f; 学习目的 写一些自己心中的小工具&#xff1b;Swing 界面的维护&#xff1b;了解 MVC 架构&#xff0c;以及监听事件。 本文对图形用户界面&#xff08…

基于BP神经网络的64QAM解调算法matlab性能仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 ....................................................... % 第一部分&#xff1a;加载并可视…

CSS绘制圆弧

css绘制如图的圆弧&#xff1a; 这种矩形弧形的效果中&#xff0c;弧形的效果一般是由一条曲线拉伸出来的&#xff0c;这条曲线往往是属于一个椭圆的&#xff0c;所以可以绘制一个椭圆&#xff0c;截取部分可视区域实现效果。 <style> .wrapper{width: 400px;height: 60…

Minio篇:初识MinIO

1. MinIO快速入门 1.1.MinIO核心概念 下面介绍MinIO中的几个核心概念&#xff0c;这些概念在所有的对象存储服务中也都是通用的。 对象&#xff08;Object&#xff09; 对象是实际的数据单元&#xff0c;例如我们上传的一个图片。 存储桶&#xff08;Bucket&#xff09; 存储…

C语言分支和循环(2)

我的相关博客&#xff1a; C语言的分支与循环&#xff08;1&#xff09; 1.switch语句 除了 if 语句外&#xff0c;C语⾔还提供了 switch 语句来实现分⽀结构。 switch 语句是⼀种特殊形式的 的 if...else 结构&#xff0c;⽤于判断条件有多个结果的情况。它把多重 else if…

栈和队列题目练习

本节小编选了两道题来加深对栈和队列的认识理解&#xff01; 有效的括号 方法1&#xff1a;直接用栈的结构&#xff08;动态数组&#xff09; 本题可以用栈这个结构来解答&#xff0c;将(,{,[ 左括号压入栈中&#xff0c;然后取出栈顶元素与右括号),},]匹配。不匹配的话&…

单片机通信协议(1):SPI简介

关于SPI SPI&#xff08;串行外设接口&#xff09;是板载设备间通信接口之一。它是由摩托罗拉公司&#xff08;飞思卡尔半导体&#xff09;推出的。由于其简单性和通用性&#xff0c;它被纳入各种外围设备中&#xff0c;并与飞利浦I2C总线并列。 SPI的三线或四线信号数量比IIC…

OSPF状态机+SPF算法

OSPF状态机 1.点到点网络类型 down-->init-->(前提为可以建立邻接)exstart——>exchange-->若查看邻接的DBD 目录后发现不用进行LSA 直接进入ful。若查看后需要进行查询、应答先进入loading&#xff0c;在查询应答完后再进入 fuIl: 2.MA网络类型 down --&g…

【C++修行之道】类和对象(三)拷贝构造函数

目录 一、 概念 二、特征 正确的拷贝构造函数写法&#xff1a; 拷贝函数的另一种写法 三、若未显式定义&#xff0c;编译器会生成默认的拷贝构造函数。 四、编译器生成的默认拷贝构造函数已经可以完成字节序的值拷贝了&#xff0c;还需要自己显式实现吗&#xff1f; 深拷…

Transformer 动画讲解:数据处理的四大关键步骤

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 汇总合集…

读《Diffusion Models: A Comprehensive Survey of Methods and Applications》综述

读《Diffusion Models: A Comprehensive Survey of Methods and Applications》综述 关于此文&#xff0c;我的一个见解想法&#xff0c;重点关注他怎么描述 「Diffusion Model」的引用的&#xff0c;以及未来方向就好了。当然从这篇文章可以知道 「Diffusion Model」的一个基石…

【哈希】用哈希桶封装unordered_map unordered_set

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; C进阶 &#x1f389;其它专栏&#xff1a; C初阶 | Linux | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解 用哈希桶封装 unordered_map & unordered_set 的相关内容。 如…

Linux系统使用Docker安装Drupal结合内网穿透实现远程访问管理后台

目录 前言 1. Docker安装Drupal 2. 本地局域网访问 3 . Linux 安装cpolar 4. 配置Drupal公网访问地址 5. 公网远程访问Drupal 6. 固定Drupal 公网地址 前言 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊Linux系统使用Docker安装Drupal…

python在cmd中运行.exe文件时报错:不是内部或外部命令,也不是可运行的程序或批处理文件。的解决办法

添加系统环境变量&#xff1a; 设置环境变量&#xff0c;在用户变量里面添加 【PATH&#xff1a;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Windows\SysWOW64】 在系统变量里面添加,【变量名&#xff1a;ComSpec】 【变量值&#xff1a;%SystemRoo…

ROS2从入门到精通2-1:launch多节点启动与脚本配置

目录 0 专栏介绍1 ROS2的启动脚本优化2 ROS2多节点启动案例2.1 C架构2.2 Python架构 3 其他格式的启动文件3.1 .yaml启动3.2 .xml启动 0 专栏介绍 本专栏旨在通过对ROS2的系统学习&#xff0c;掌握ROS2底层基本分布式原理&#xff0c;并具有机器人建模和应用ROS2进行实际项目的…

适合能源企业的文档安全外发系统应该是什么样的?

能源企业是市场经济中的重要组成&#xff0c;也是社会可持续长远发展的关键组成之一&#xff0c;能源行业在开拓新能源业务线、提升产能的日常经营中&#xff0c;也需要与外部合作伙伴、客户间进行密切的业务往来&#xff0c;文档可能涉及多个领域多个类型。 能源供应合同&…

IDEA2023.2单击Setting提示报错:Cannot get children Easy Code

1、单击Setting&#xff0c;不能弹出对话框 2、打开IDE Internal Errors发生错误 原因&#xff1a; 报错信息 "Cannot get children Easy Code" 通常指的是 IntelliJ IDEA 在尝试访问或操作 Easy Code 插件的子设置时遇到了问题。 主要检查是有网络&#xff08;断断…

【排序算法】选择排序以及需要注意的问题

选择排序的基本思想&#xff1a;每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的数据元素排完 。 第一种实现方法&#xff1a; void SelectSort(int* arr, int n) {for (int j 0…