42、springboot 的 路径匹配 和 内容协商
springboot 的 路径匹配 和 内容协商
对于路径匹配,自己的总结就是:
以前路径匹配时默认不检查后缀,http://localhost:8080/aaa.json 可以直接访问到 @RequstMapping(“/aaa”) 的方法。现在不行了。现在会检查后缀了。
内容协商的理解总结:
就是通过添加 xml 依赖,或者在yml配置文件中进行一些配置,来指定访问的方法响应回来的数据类型,比如 json、xml 等。
★ 路径匹配
以前:路径匹配时默认不检查后缀。比如请求 "GET /users.json"Spring MVC可用@GetMapping("/users")修饰的处理方法来处理该请求。Pathmatch类中定义了如下一行:private boolean useSuffixPattern = false; 表明Spring Boot默认的路径匹配会执行后缀检查,这意味着“GET /users.json”请求不会匹配到@GetMapping("/users")注解修饰的处理方法。【可见】:Spring Boot不再建议使用 请求后缀 作为 “内容协商” 的方式。【简单来说】 请求地址必须与@RequestMapping映射的地址完全相同,不支持请求地址后面带后缀。
对于路径匹配,自己的总结就是:
以前路径匹配时默认不检查后缀,http://localhost:8080/aaa.json 可以直接访问到 @RequstMapping(“/aaa”) 的方法。现在不行了。现在会检查后缀了。
★ 何谓内容协商
内容协商:服务器中控制器的一个处理方法可根据请求自动生成不同 content-type 的响应,比如HTML响应、JSON、XML响应,甚至EXCEL、PDF响应等。内容协商时如何判断客户端希望接收的响应类型呢?- 根据Accept请求头(最主流的方式,尤其在RESTful)- 根据请求地址的后缀,比如请求/users.json,表明希望服务器生成JSON响应。 (已经不再推荐,可能会被彻底删除)- 根据额外的请求参数。比如请求/users?format=json,表明希望服务器生成JSON响应。提示:关于内容协商的深入介绍和详细示例,可以参考《轻量级Java Web企业应用实战》的6.5.8小节。
代码演示:
需求:根据设置Accept请求头来演示返回的响应类型。
返回json格式:
添加注解 @RestController 返回的就是 json 格式的数据

返回 xml 格式:
要返回xml 格式的数据,需要添加xml 的依赖

如图:代码没变,如果添加了这个 xml 依赖 ,访问这个方法,返回的自己就变成了 xml 格式的响应了。

postman 测试

★ 内容协商的推荐方式
- 优先使用Accept请求头。- 如果不设置合适的Accept请求头,建议使用额外的format参数来告诉服务器生成的响应类型,比如”GET /users?format=json“告诉服务器生成JSON响应。在Contentnegotiation类的源代码中,包含如下行:- private boolean favorParameter = false;
表明Spring Boot默认关闭了使用额外的参数来指定响应类型。可通过如下配置来启用这个 --> 使用额外的参数来指定响应类型:
spring.mvc.contentnegotiation.favor-parameter=true# 设置使用额外的fkft请求参数(代替原来默认的format请求参数)来指定响应的内容类型
spring.mvc.contentnegotiation.parameter-name=fkft【为了生成XML响应,首先需要让应用增加XML支持,比如Jackson Dataformat XML】
代码演示:
需求:通过使用额外的参数来指定响应类型
配置这个就能启动 【使用额外参数来执行响应类型】的功能。默认是关闭的,需要在配置中启动。
这种就是内容协商。
#配置通过使用额外的参数来指定响应类型
spring:mvc:contentnegotiation:favor-parameter: true

演示这个功能:
# 设置使用额外的 ljh 请求参数名(代替原来默认的format请求参数名)来指定响应的内容类型
spring.mvc.contentnegotiation.parameter-name=ljh

内容协商的理解总结:就是通过添加 xml 依赖,或者在yml配置文件中进行一些配置,来指定访问的方法响应回来的数据类型,比如 json、xml 等。
★ 强制开启基于后缀匹配的内容协商。
需要同时开启两个设置:- 路径匹配时启用”后缀匹配“(不检查后缀)- 内容协商时使用后缀添加如下配置:
# 设置路径匹配时忽略检查后缀
# 该配置让“GET /users.json”能匹配GetMapping("/users")
spring.mvc.pathmatch.use-suffix-pattern=true
# 开启内容协商时的“后缀匹配”模式
spring.mvc.contentnegotiation.favor-path-extension=true▲ 更安全的配置:在路径匹配时,后缀匹配只匹配那些已经注册过的后缀类型,比如.json、.xml等,但对于.exe这种未知的后缀那就依然不匹配。# 设置路径匹配时忽略检查后缀
spring.mvc.pathmatch.use-suffix-pattern=true
# 开启内容协商时的“后缀匹配”模式
spring.mvc.contentnegotiation.favor-path-extension=true
# 设置只匹配已注册的后缀类型
spring.mvc.pathmatch.use-registered-suffix-pattern=true
# 通过下面属性可注册自定义的扩展名和内容类型的对应关系
spring.mvc.contentnegotiation.media-types.markdown=text/markdown
代码演示:
# 设置路径匹配时忽略检查后缀
# 该配置让“GET /users.json”能匹配GetMapping("/users")
spring.mvc.pathmatch.use-suffix-pattern=true
# 开启内容协商时的“后缀匹配”模式
spring.mvc.contentnegotiation.favor-path-extension=true
演示通过 后缀名 来返回指定的响应类型。强制开启基于后缀匹配的内容协商
如图:
后缀为 .xml 返回的响应类型就是 xml
后缀为 .json 返回的响应类型就是 json
后缀为 .abc 乱写的,返回的响应类型就是原本不添加后缀的响应类型

因为后缀乱写都能匹配到,所以安全起见需要再配置一些东西
# 设置只匹配已注册的后缀类型
spring.mvc.pathmatch.use-registered-suffix-pattern=true
# 通过下面属性可注册自定义的扩展名和内容类型的对应关系
spring.mvc.contentnegotiation.media-types.markdown=text/markdown
通过配置这个 spring.mvc.pathmatch.use-registered-suffix-pattern=true,设置只匹配已注册的后缀类型后,乱写后缀就匹配不到方法了,安全性提高了一点

这个是自定义的拓展名:
# 通过下面属性可注册自定义的扩展名和内容类型的对应关系
# 指定 .markdown 后缀 和 text/markdown 之间的对应关系
spring.mvc.contentnegotiation.media-types.markdown=text/markdown
自定义的拓展名,不过应该是没有这个text/markdown与之对应,所以报错


相关文章:
42、springboot 的 路径匹配 和 内容协商
springboot 的 路径匹配 和 内容协商 对于路径匹配,自己的总结就是: 以前路径匹配时默认不检查后缀,http://localhost:8080/aaa.json 可以直接访问到 RequstMapping(“/aaa”) 的方法。现在不行了。现在会检查后缀了。 内容协商的理解总结&…...
一文讲解Linux内核内存管理架构
内存管理子系统可能是linux内核中最为复杂的一个子系统,其支持的功能需求众多,如页面映射、页面分配、页面回收、页面交换、冷热页面、紧急页面、页面碎片管理、页面缓存、页面统计等,而且对性能也有很高的要求。本文从内存管理硬件架构、地址…...
教你如何使用API接口获取数据
随着互联网技术的发展和应用的普及,越来越多的系统和应用提供API接口供其他系统和应用进行数据交互。通过API接口,我们可以获取到各种各样的数据,例如天气预报、股票行情、新闻摘要等等。本文将介绍如何使用API接口获取数据,并附有…...
集美大学计算机改考408!福建省全面改考,仅剩一个自命题院校
9月5日,集美大学发布通知,0835软件工程、0854电子信息2024考试科目发生变更!由822数据结构调整为408计算机学科专业基础 https://zsb.jmu.edu.cn/info/1532/4701.htm 直接由一门改为考四门,难度升级不小。 目前福建省内计算机考…...
Hololens2部署很慢可能是unity工程选择不对
这样就很快,几分钟就完成了。(虽然又遇到新问题了) 第一次使用时如下,直接运行了一个多小时还没有完...
群论学习记录
群论学习记录 1. 2023.09.07 1. 2023.09.07 群论 (Group Theory) 终极速成 / 物理系零基础火箭级 notes https://zhuanlan.zhihu.com/p/378039151 https://zhuanlan.zhihu.com/p/164653537 群的定义重排定理子群陪集定理:由重排定理可推出1.4-(2&#x…...
Fiddler安装与使用教程(2) —— 软测大玩家
😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…...
ChatGPT集锦
目录 1. 一条指令让ChatGPT变的更强大2. 对ChatGPT提问时,常见的10种错误描述3. Custom instructions如何设置1. 一条指令让ChatGPT变的更强大 在使用GPT的过程中,如何让AI更清晰地了解你的需求很重要?今天分享一个指令,可以让GPT成为你的好同事,与你一起分析和解决问题,…...
CRM系统中的工作流管理及其重要性
工作流是CRM系统中较为常见的功能,它可以有效减少重复工作、提高销售效率。如果您想深入了解,本文就来详细说说,CRM工作流是什么?工作流的作用? 什么是CRM工作流? CRM工作流是指在CRM系统中,根…...
Go framework-go-zero
一、Go Go天然适配云原生,而云原生时代已经到来,各个应用组件基础设施等都应该积极的去拥抱云原生。 不要让框架束缚开发。 1、go-zero介绍 go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,…...
【Python】【Fintech】用Python和蒙特卡洛法预测投资组合未来收益
【背景】 想利用蒙特卡洛方法和yahoo,stooq等财经网站上的数据快速预测特定portfolio的收益。 【分析】 整个程序的功能包括 读取json中的portfolio组合创建蒙特卡洛模拟预测收益的算法创建从财经网站获得特定投资组合数据,并根据2的算法获得该Index或Portfolio收益预测结…...
网络层重点协议-IP协议(结构分析)
IP协议数据报格式 一.4位版本号 用来表示IP协议的版本,现有的IP协议只有两个版本IPv4和IPv6 二.4位首部长度 IP协议数据报报头的长度 三.8位服务类型 3位优先权字段(已经弃用),4位TOS字段,和1位保留 字段(必…...
windows使用vim编辑文本powershell
windows使用vim编辑文本 1、安装 chocolatey 包 以管理员身份打开 PowerShell 进行安装 Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString(https://chocolatey.org/install.ps1))2、管理员身份打开 PowerShell 并使…...
学单片机有前途吗?
学单片机有前途吗? 个人认为学习任何一门技术都比不学的强,针对学单片机有前途吗?那么比较对象当然就是在整个IT行业做对比。因此我们可以从职业前景、钱景、这几方面综合考量。 学单片机有前途吗?我觉得重要的一点就是是否适合职业生涯发展,总说程序…...
【计算机网络】 子网划分
文章目录 IP地址分类子网掩码网关广播地址非默认子网掩码子网划分常见问题 IP地址分类 学会十进制和二进制的相互转换可以很快速的有规律的记住 子网掩码 又叫网络掩码,地址掩码,子网络遮罩,就是说把子网络遮起来,不让外界窥探到…...
vscode ros配置
【ROS】VSCODE ROS 配置方法(保姆级教程,总结了多篇)_ros vscode_晴明大大的博客-CSDN博客...
【权限提升-Windows提权】-UAC提权之MSF模块和UACME项目-DLL劫持-不带引号服务路径-不安全的服务权限
权限提升基础信息 1、具体有哪些权限需要我们了解掌握的? 后台权限,网站权限,数据库权限,接口权限,系统权限,域控权限等 2、以上常见权限获取方法简要归类说明? 后台权限:SQL注入,数…...
【C++】—— 特殊类设计
目录 序言 (一)设计一个不能被拷贝的类 (二)设计一个只能在堆上创建对象的类 (三)设计一个只能在栈上创建对象的类 (四)设计一个不能被继承的类 总结 序言 特殊类设计是指在面…...
MFC删除Button控件具体操作
删除Button按键;删除xxxDlg.h中消息映射函数定义 class Ctest4Dlg : public CDialogEx {... public://afx_msg void OnBnClickedButton1();... }删除xxxDlg.cpp中“DoDataExchange”和“BEGIN_MESSAGE_MAP”中的相关代码 void CtestDlg::DoDataExchange(CDataExch…...
vue、js实现页面全屏
浏览器可能是处于安全的考虑,无法实现进入页面自动全屏,只能通过用户操作的形式触发全屏!!! ps:可以通过登录按钮触发登录成功自动全屏 实测vue中可通过登录点击事件加载组件自动全屏 import { useFulls…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
