当前位置: 首页 > news >正文

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

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

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

Mac软件卸载指南,简单易懂!

刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"&#xff0…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...