1. 路由映射:

        @RequestMapping:当用户访问某个 URL 时,该注解会根据 URL 的路径映射到具体的程序中对应的类或方法(路由映射)。修饰方法时,路径为类路径 + 方法路径。默认情况下同时支持 GET 和 POST,也可以显式指定,如下:

// 此时只支持 GET 方法
@RequestMapping(value = "/m2", method = RequestMethod.GET)

        @GetMapping:和上面等价,只支持 GET 的另一种写法。

2. 接收请求中的参数:

        首先,请求报文中有哪些地方可能带有后端需要的参数?

        从 HTTP 协议传过来的参数均是字符串,Spring 会根据后端定义的参数类型进行转换,若无法转换则会报 400。

2.1 接收查询字符串中的数据

        接收单个参数:

public String r1(String keyword)

        @RequestParam:用于重命名,此时前端的参数名为 keyword。一旦使用该注解则默认该参数为必传参数,如果客户端没有传此参数会报 400

public String r1(@RequestParam("keyword") String key)

        也可以显式指定该参数为非必传参数,此时不传参数会为 null。对于可能为空,且并未自动初始化的参数,应该使用包装类型,因为包装类型可以为 null,而基本数据类型不可以为 null。

public String r2(@RequestParam(value = "q", required = false)

        接收数组:Spring 会帮我们自动绑定数组中参数的值。

public int[] r3(int[] arr)

         下面两种方法都可以:

        接收集合:需要使用 @RequestParam 绑定参数关系,也就是告知 Spring 要将传来的数据构造为集合。

public String r4(@RequestParam List<Integer> list)

2.2 接收 body 中的数据

        @RequestBody:该注解用于绑定请求正文中的数据。

        接收 JSON:直接使用 Java 对象就可以轻松接收 JSON。这是因为 Spring 已经帮我们内置了 JSON 和 Java 对象相互转换的工具(Jackson)。

public String r5(@RequestBody UserInfo userInfo)

        接收文件:可以使用 @RequestPart 来重命名。

    public String r11(MultipartFile file) throws IOException {// 得到文件名String filename = file.getOriginalFilename();// transferTo 内部封装了 InputStream 和 OutputStreamfile.transferTo(new File("D:\\", "UserFile.jpg"));return "已接收:" + filename;}

2.3 接收 header 中的数据

        @RequestHeader:通过 header 中的键名获取。

public String getUserAgent2(@RequestHeader("User-Agent") String ua)

       @CookieValue:获取 cookie 中的某一个值。如果想要获取很多 cookie 就要写很多注解,所以也可以采用下面的方法。

public String r13(@CookieValue("name") String name)

        使用 HttpServletRequest 类:HttpServletRequest 和 HttpServletResponse 是 Servlet 提供的接口,由 Tomcat 为我们实现。SpringWebMVC 是在 Servlet 的基础上构建的框架,这两个 Servlet 的核心类作为 SpringWebMVC 的内置对象存在,HttpServletRequest 中封装了 HTTP 请求的全部信息,HttpServletResponse 中封装了 HTTP 响应的全部信息。在高级 Web 框架出现前,使用这两个类就可以获取通信的全部数据,虽然现在 SpringWebMVC 为我们提供了许多方便的注解,但有些情况下使用 HttpServletRequest 更优雅。

    public String r12(HttpServletRequest request) {Cookie[] cookies = request.getCookies();StringBuilder builder = new StringBuilder();if (cookies == null) return "无 Cookie 设置!";for (Cookie c : cookies) builder.append(c.getName()).append(":").append(c.getValue()).append(",");return "Cookie 信息为:" + builder;}
    public String getUserAgent(HttpServletRequest request) {return request.getHeader("User-Agent");}

        获取 Session:并不是指从客户端获取 Session,因为 Session 是保存在服务器内存中的,这里实际上是在获取 Cookie 中的 sessionId,然后根据 sessionId 获取服务器中对应的 Session 对象。

        需要实例 HttpServletRequest 类,调用其提供的 getSession 方法,这个方法就是封装了上面提到的两步。如果检索到 Cookie 中有 sessionId,则表示服务器已经在内存中保存了该 Session,该方法会返回现有的Session。如果不存在,则会生成 sessionId,创建新的 Session,在响应中返回该 sessionId 给客户端。因此 getSession 默认返回非空 Session,若需避免创建新 Session,应指定参数为 getSession(false)。

HttpSession session = request.getSession();

        也可以不实例 HttpServletRequest 类,直接使用 HttpSession 类获取,此时不存在 Session 会自动创建。

public String r15(HttpSession session)

        针对 Session 的进一步操作:

session.setAttribute(使用字符串命名, 需要绑定到该会话的对象);
session.getAttribute(指定的名称);

2.4 获取 URL 中资源定位部分的参数

        取路径参数的情况并不多,{ } 里的数据即要取的值。

        @PathVariable:意为路径中的变量,取路径参数需要加此注解,可以填参数来重命名。

    @RequestMapping("/r6/{r7}")public String r6(@PathVariable String r7)

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

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

相关文章

pip 安装默认切换到国内镜像(清华园,阿里云等)

国内Python包镜像地址如下&#xff1a; 清华&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple/阿里云&#xff1a;https://mirrors.aliyun.com/pypi/simple/中国科技大学&#xff1a;https://pypi.mirrors.ustc.edu.cn/simple/华为云&#xff1a;https://repo.huaweiclou…

AI agent 学习

参考&#xff1a; AI搜索DeepResearch&#xff1f;_大模型 deepsearch 深度搜索-CSDN博客 Agent是以大语言模型为大脑驱动的系统&#xff0c;具备自主理解、感知、规划、记忆和使用工具的能力&#xff0c;能够自动化执行和完成复杂任务。 自主性和自适应&#xff0c;是判断一款…

【PTA数据结构 | C语言版】求单链表list中的元素个数,即表长

本专栏持续输出数据结构题目集&#xff0c;欢迎订阅。 文章目录题目代码题目 请编写程序&#xff0c;将 n 个整数顺次插入一个初始为空的单链表的表头。最后输出单链表的表长。 本题旨在训练学习者熟悉单链表的基本操作&#xff0c;不建议直接输出 n。 输入格式&#xff1a;…

玩转Docker | 使用Docker部署HomeBox家庭库存管理工具

玩转Docker | 使用Docker部署HomeBox家庭库存管理工具 前言一、HomeBox介绍Homebox简介主要特点主要使用场景二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署HomeBox服务下载HomeBox镜像编辑部署文件创建容器检查容器状态检查服务端口安全设置四、访问Hom…

QT中的常用控件-QWidget的enable属性

QT中的常用控件-QWidget的enable属性 enable描述了一个控件是否处于“可用”状态 与之相对应的概念是“禁用”&#xff0c;禁用是该控件不能接受任何用户的输入事件&#xff0c;并且外观上往往是灰色的 如果一个Widget被禁用&#xff0c;则该Widget的子元素也被禁用API说明IsEn…

【数据结构】复杂度分析

目录 一、算法 1.基本概念 2.描述方法 3.算法效率 二、算法的时间复杂度 三、算法的空间复杂度 一、算法 1.基本概念 通俗的讲&#xff0c;算法是解决问题的方法&#xff0c;比如在现实生活中一道菜谱&#xff0c;一个安装轮椅的操作指南等。 严格的说&#xff0c;算法…

推荐系统基础 --ShusenWang

学习b站up主的ShusenWang的推荐系统笔记 指标 任何系统/算法/模型都需要评估&#xff0c;对于推荐系统的指标有消费指标和北极星指标&#xff0c;消费指标是衡量用户对产品的使用情况&#xff0c;使用频率广度和深度&#xff0c;用于了解用户的使用习惯&#xff0c;北极星指标是…

linux wsl2 docker 镜像复用快速方法

GitHub项目中的devcontainer.json、Dockerfile构建了一个A项目的镜像环境&#xff0c;现在我有一个文件夹&#xff0c;文件夹中只有一个b.py文件&#xff0c;此时我希望使用A项目的环境&#xff0c;如何实现&#xff1f;注意&#xff1a; 建议使用下面的方法2 解决方案&#xf…

(生活比喻-图文并茂)http2.0和http3.0的队头阻塞,http2.0应用层解决,TCP层存在,3.0就是彻底解决,到底怎么理解区别???

说明一下&#xff1a; http属于应用层协议&#xff0c;TCP和udp属于传输层协议 文章目录阶段一&#xff1a;HTTP/1.1 的情况&#xff08;单车道收费站&#xff0c;一次过一辆&#xff09;阶段二&#xff1a;HTTP/2 的情况&#xff08;多车道收费站&#xff0c;但出口只有一条路…

ARM环境openEuler2203sp4上部署19c单机问题-持续更新

问题01、报错如下orcl:/home/oracledb15> export CV_ASSUME_DISTIDRHEL8 orcl:/home/oracledb15> $ORACLE_HOME/runInstaller -applyPSU /soft/37642901 Exception in thread "main" java.lang.UnsatisfiedLinkError: /u01/app/oracle/product/19.0.0/db_1/oui…

php成绩分析系统单科分数分布分析202507

提交二维数据表&#xff0c;识别成绩科目显示科目选择&#xff0c;选择科目后显示样本数,平均分,最高分,最低分,中位数,柱状图图表显示各分值人数分布&#xff0c;表格显示统计数据。 技术&#xff1a;html5css3ajaxphp 原生代码实现。 效果图&#xff1a; 下载&#xff1a; …

Redis Cluster 与 Sentinel 笔记

目录 Redis 集群&#xff08;Cluster&#xff09;概述 Cluster 的工作原理 Cluster 配置与部署 Cluster 常见问题与限制 Redis Sentinel&#xff08;哨兵&#xff09;机制概述 Sentinel 的工作机制 Sentinel 配置与部署 Sentinel vs Cluster 总结 Redis 集群&#xff…

LLM视觉领域存在模型视觉识别不准确、细粒度视觉任务能力不足等科学问题

LLM视觉领域存在模型视觉识别不准确、细粒度视觉任务能力不足等科学问题 除了前面提到的数据集,还有一些用于评估视觉推理等能力的经典数据集。目前关于LLM视觉领域经典提示词方面的名校或大公司论文较少,以下是相关科学问题、数据集及部分相关论文介绍: 科学问题 视觉推理…

Node.js worker_threads:并发 vs 并行

一、核心结论 Node.js 的 worker_threads 模块实现的是 并行计算 &#xff0c;而非传统意义上的“并发”。其通过操作系统级线程实现多核 CPU 的并行执行&#xff0c;同时保留 Node.js 单线程事件循环的并发模型。 二、关键概念解析 1. 并发&#xff08;Concurrency&#xff09…

gloo 多卡训练

我们遇到了分布式训练中的通信超时问题&#xff08;Connection closed by peer&#xff09;。根据错误信息&#xff0c;问题发生在梯度同步的屏障&#xff08;barrier&#xff09;操作时。以下是针对此问题的优化措施和代码修改&#xff1a; 优化措施&#xff1a; 增强通信稳…

【Docker】在银河麒麟ARM环境下离线安装docker

1、前言 采用离线安装的方式。 关于离线安装的方式官网有介绍&#xff0c;但是说的很简单&#xff0c;网址&#xff1a;Binaries | Docker Docs 官网介绍的有几种主流linux系统的安装方式&#xff0c;但是没有kylin的&#xff0c;所以在此记录一下。 在安装过程中也遇到了些…

AUTOSAR进阶图解==>AUTOSAR_SWS_SOMEIPTransformer

AUTOSAR SOME/IP 转换器规范详解 基于AUTOSAR标准的SOME/IP转换器协议解析与实现指南目录 1. 介绍与功能概述2. SOME/IP架构 2.1 SOME/IP转换器架构2.2 组件解释2.3 层级说明 3. SOME/IP通信流程 3.1 客户端/服务器通信序列3.2 通信流程解释 4. SOME/IP消息结构 4.1 消息结构类…

Python 机器学习核心入门与实战进阶 Day 5 - 模型调参与交叉验证技巧(GridSearchCV、KFold)

✅ 今日目标 理解模型调参的重要性&#xff08;避免欠拟合/过拟合&#xff09;掌握 GridSearchCV 的使用方法学习 K 折交叉验证的基本流程与意义对比不同参数组合的表现使用 Pipeline 简化流程&#xff08;进阶&#xff09;&#x1f4d8; 一、调参思路方法描述Grid Search穷举所…

Python打卡:Day47

复习日 浙大疏锦行

ACE-Step:AI音乐生成基础模型

ACE-Step是什么 ACE-Step 是 ACE Studio 和 StepFun 联合推出的一款开源音乐生成基础模型&#xff0c;专为高效、连贯、可控的音乐创作而设计。它融合了扩散模型、深度压缩自编码器&#xff08;DCAE&#xff09;和轻量级线性变换器&#xff0c;生成速度比传统大模型快约 15 倍…