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…...

从零开始探索C语言(四)----循环
文章目录 1. C 循环1.1 while 循环1.2 for 循环1.3 do...1.4 嵌套循环 2. 循环控制语句2.1 break 语句2.2 continue 语句2.3 goto 语句 1. C 循环 有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语…...

JS 替换 JSON 数组中的指定字段名
直接链式操作 JSON.parse(JSON.stringify(你的json数组).replace(/原来的字段名/g, "想要的字段名")); 例如: const list [{ id: "1", area: "南明区" }, { id: "2", area: "云岩区" }]; console.log(JSON.pa…...

WebSocket消息推送
创建WebSocket工具类 package org.jmis.riskassess.config;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component;import javax.websocket.*; import javax.websocket.server.PathParam; import javax.websocket.serve…...

二维码智慧门牌管理系统:让城市管理更智能、便捷
文章目录 前言一、二维码智慧门牌管理系统的特点二、数据集约化与规范化三、管理智能化与长效化四、标识规范化与易维护五、服务多元化与便捷化 前言 随着城市化进程的加速,城市管理面临着越来越多的挑战。为了解决地名地址管理交织错综、地名地址支撑政府管理成效…...

React动态添加标签组件
背景 在前端开发的过程中,一些表单的输入经常需要输入多个内容,如果采用一个输入框逗号分隔的方式,展示起来不是很清晰,一般需要采用标签的方式 需求 可以指定空状态时的标题设置标签颜色每个标签的最大长度(字符数)接口传递的时候的分隔标记(是用逗号,还是其他)直接处理表单,不…...

[Linux]套接字通信
摘于https://subingwen.cn,作者:苏丙榅 侵删 文章目录 1. 套接字-socket1.1 概念1.2 网络协议1.3 socket编程1.3.1 字节序1.3.2 IP地址转换1.3.3 sockaddr 数据结构1.3.4 套接字函数 1.4 TCP通信流程1.4.1 服务器端通信流程1.4.2 客户端的通信流程 1.5 扩展阅读1.5.1 初始化套…...

MySQL的故事——MySQL架构与历史
MySQL架构与历史 文章目录 MySQL架构与历史一、MySQL逻辑架构二、并发控制三、事务四、多版本并发控制(MVCC) 一、MySQL逻辑架构 第一层:连接处理、授权认证、安全等等 第二层:查询解析、分析、优化、缓存以及所有的内置函数。包含跨存储引擎的功能&…...

手写Mybatis:第12章-完善ORM框架,增删改查操作
文章目录 一、目标:完善增删改查二、设计:完善增删改查三、实现:完善增删改查3.1 工程结构3.2 完善增删改查类图3.3 扩展解析元素3.4 新增执行方法3.4.1 执行器接口添加update3.4.2 执行器抽象基类3.4.3 简单执行器 3.5 语句处理器实现3.5.1 …...

【1】DDR---容量计算
1、容量计算 density:芯片容量,bit为单位 depth:地址空间, width:数据位宽 densitydepth*width 2、三星DDR 4Gbit(总容量)256M(地址空间)*16(位宽ÿ…...

YashanDB:潜心实干,数据库核心技术突破没有捷径可走
都说数据库是三大基础软件中的一块硬骨头,技术门槛高、研发周期长、工程要求高,市场长期被几大巨头所把持。 因此,实现突破一直是中国数据库产业的夙愿。自上个世纪80年代起,中国数据库产业走过艰辛坎坷的四十余载,终…...