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、创建 业务处理器 Controller类
5、测试
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;}
}



- 指定默认值
@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

- 允许为空
@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接收
相关文章:
SpringBoot六种API请求参数读取方式
SpringBoot六种API请求参数读取方式 同步请求和异步请求 同步: 指单线程依次做几件事异步: 指多线程同时做几件事 同步请求: 指客户端浏览器只有一个主线程, 此线程负责页面的渲染和发出请求等操作, 如果此主线程发出请求的话则停止渲染而且会清空页面显示的内容 直到服务器响…...
WSDM2024推荐系统和LLM相关论文整理(二)
WSDM 2024接收的论文已经公布,全部收录的论文可前往地址 网址:https://www.wsdm-conference.org/2024/accepted-papers/ 其中推荐系统相关论文三十余篇,下文列举了部分论文的标题以及摘要,更多内容欢迎关注公众号【深度学习推荐算…...
Mybatis 查询TypeHandler使用,转译查询数据(逗号分隔转List)
创建自定义的Hanndler /*** Package: com.datalyg.common.core.handler* ClassName: CommaSeparatedStringTypeHandler* Author: dujiayu* Description: 用于mybatis 解析逗号拼接字符串* Date: 2024/5/29 10:03* Version: 1.0*/ public class CommaSeparatedStringTypeHandle…...
易查分小程序|如何开启个人密钥功能?
一般情况下发布查询,用姓名和手机尾号等作为查询条件就足够了,如果查询需要的私密性要求很高,可以使用易查分的【个人密钥】功能,下面就来教大家如何制作吧。 🔑个人密钥功能的特点: ✅学生家长可以自主修…...
NoSQL是什么?NoSQL数据库存在SQL注入攻击?
一、NoSQL是什么? NoSQL(Not Only SQL)是一种非关系型数据库的概念。与传统的关系型数据库不同,NoSQL数据库使用不同的数据模型来存储和检索数据。NOSQL数据库通常更适合处理大规模的非结构化和半结构化数据,且能够…...
成功解决“ImportError: cannot import name ‘mapping‘ from ‘collections‘”错误的全面指南
成功解决“ImportError: cannot import name ‘mapping’ from ‘collections’”错误的全面指南 成功解决“ImportError: cannot import name ‘mapping’ from ‘collections’”错误的全面指南 一、引言 在Python编程中,当我们尝试从某个模块中导入某个名称时&…...
apexcharts数据可视化之圆环柱状图
apexcharts数据可视化之圆环柱状图 有完整配套的Python后端代码。 本教程主要会介绍如下图形绘制方式: 基础圆环柱状图多组数据圆环柱状图图片背景自定义角度渐变半个圆环图虚线圆环图 基础圆环图 import ApexChart from react-apexcharts;export function Cir…...
2024ciscn初赛——easycms
什么是CMS? CMS是“Content Management System”的缩写,意为“内容管理系统”。网站的开发者为了方便,制作了不同种类的CMS,可以加快网站开发的速度和减少开发的成本。 常见的CMS: php类cms系统:dedecms、…...
融合神话传说:构建公共开放平台的技术探索
当今科技发展日新月异的时代,我们越来越意识到跨文化的融合和开放共享的重要性。在这篇博客中,我们将探讨如何利用国外与国内古代神兽和神话故事的灵感,来设计一个创新的公共开放平台。 源自神话的灵感 古代神兽在不同文化中都扮演着重要角色…...
鸿蒙应用Stage模型【应用/组件级配置】
应用/组件级配置 在开发应用时,需要配置应用的一些标签,例如应用的包名、图标等标识特征的属性。本文描述了在开发应用需要配置的一些关键标签。 应用包名配置 应用需要在工程的AppScope目录下的[app.json5配置文件]中配置bundleName标签,…...
Python魔法之旅-魔法方法(05)
目录 一、概述 1、定义 2、作用 二、应用场景 1、构造和析构 2、操作符重载 3、字符串和表示 4、容器管理 5、可调用对象 6、上下文管理 7、属性访问和描述符 8、迭代器和生成器 9、数值类型 10、复制和序列化 11、自定义元类行为 12、自定义类行为 13、类型检…...
机器学习笔记(1):sklearn是个啥?
sklearn 简介 Sklearn是一个基于Python语言的开源机器学习库。全称Scikit-Learn,是建立在诸如NumPy、SciPy和matplotlib等其他Python库之上,为用户提供了一系列高质量的机器学习算法,其典型特点有: 简单有效的工具进行预测数据分…...
C++与C语言 通过指针改变const变量的值
一、问题描述 当一个变量声明为const时,通常是不可以改变它的值的,程序设计过程中也不应该这么做。 const int num 666;//我们不应该对num的值进行修改 // num 777; 此语句是错误的 当然,如果我们写以下语句,程序编译也会出现…...
OpenJDK优化技术之标量替换(Scalar Replacement)
标量替换 (SR) 是 OpenJDK 中一项强大的优化技术,旨在通过将复杂对象分解为更简单、更易于管理的标量变量来提高 Java 应用程序的性能。 1.前言 OpenJDK JVM 有两个即时编译器,C1 和 C2。C2 是一种应用许多优化来生成非常高效的编译版本程序的编译器。…...
优思学院|研发工程师获取六西格玛证书有用吗?
在现代的工业领域中,研发工程师不仅需要具备强大的技术能力,还需要掌握有效的管理方法,以确保产品的高质量和高效开发。六西格玛(Six Sigma)作为一种系统的质量管理方法,已经被广泛应用于各种行业。对于研发…...
C++第二十二弹---vector深度剖析及模拟实现(下)
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、容量操作 2、内容修改操作 3、打印函数 4、迭代器失效 4.1、什么是迭代器失效 4.2、哪些操作会引起迭代器失效 总结 1、容量操作 size()…...
GD32F470+lwip 丢包问题分析及解决
最近在用GD32和管理机之间用TCP协议开发一个功能,功能都没问题,后面跑大量发包时候的连续测试时,总是会出现偶发性的,大概几分钟到数十分钟的一次丢包。尽管在应用层做了超时机制,一旦超时就会重新建立socket链接并重新…...
好用的电子杂志制作平台分享
随着数字媒体的发展,电子杂志逐渐成为了一种流行的新媒体形式。它不仅能够吸引读者的眼球,还能够帮助创作者展示自己的才华。现在,许多电子杂志制作平台应运而生,让创作者可以轻松地制作出高质量的作品。 今天就给大家推荐一款好用…...
“云原生安全:构建弹性且安全的云上环境的关键要素“
云原生安全是指在设计和实施云原生应用时,从一开始就将安全性融入到每一个环节,确保云环境既具备弹性又安全可靠。构建一个既弹性又安全的云上环境,关键要素包括以下几个方面: 1. 微服务架构:采用微服务架构可以提高系…...
燃气安全阀检验维修:守护家庭安全的必备知识
燃气作为现代生活中不可或缺的重要能源,其安全使用直接关系到人民群众的生命财产安全。 燃气安全阀作为保障燃气系统安全运行的关键部件,一旦发生泄露,必须迅速采取有效措施进行排查、检验、维修,并建立长效机制进行预防和维护。…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
