Springboot 使用升级小记-MVC path

上文 Springboot 使用升级小记-循环依赖在升级 springboot 时遇到了循环依赖的问题,这次说说 mvc path 问题。

升级到新的版本后,mvc path 匹配有变化,我们的老项目使用 springboot 与 jsp 的集成,也就是请求 url 都是遵循如 *.do *.json *.action 等形式的请求。那么升级都就出现 404 的错误。此时需要做如下配置 在 application.yaml:

mvc:pathmatch:matching-strategy: ant_path_matcher

即让 mvc 对于 path 的解析匹配策略使用 ant_path_matcher 方式。

为什么需要这么做呢?

原因在于在 spring5 时,引入了信息 path 解析工具 PathPatternParser,低版本的 springboot 还是默认使用 AntPathMatcher 这个解析方式,高版本默认则使用 PathPatternParser。 所以通过设置使用 AntPathMatcher

简介 PathPatternParser 与 AntPathMatcher

Spring 5 引入了一个用于解析 URI 模板模式的新PathPatternParser。这是对先前所使用的 AntPathMatcher 的一个替代方案。

AntPathMatcher 是实现 Ant 风格路径模式匹配的工具,而PathPatternParser 则将路径分解为一个由 PathElements 构成的链表。这一系列 PathElements 由 PathPattern 类接收,以快速匹配相应的模式。

在 PathPatternParser 中,还引入了对新URI变量语法的支持。

  • 据说 PathPattern 性能比 AntPathMatcher 更好。
  • AntPathMatcher 使用范围广,可用于非 Web 环境,而 PathPattern 只适用于Web环境。
    所以感觉 PathPattern 并不是为了完全替代 AntPathMatcher 的。

经过测试他们差别并不是很大,这是个人测试的使用 path 的方式,把常用的应该基本列全了,大家可以自己测试下,有问题欢迎讨论

PathController

@Controller
public class PathController {@GetMapping("path1")public String path1() {return "path1";}@GetMapping("path2/index/*")public String path2() {return "path2";}@GetMapping("path3/index/**")public String path3() {return "path3";}@GetMapping("path4/*/path4")public String path4() {return "path4";}
}

RestPathController

@RestController
@RequestMapping("rest")
public class RestPathController {@GetMapping("path1")public String path1() {return "path1";}@GetMapping("path2/index/*")public String path2() {return "path2";}/*** 末尾两个 ** 支持 path3/index 访问* @return*/@GetMapping("path3/index/**")public String path3() {return "path3";}/*** 未使用 当个 * 正常。2* 个不行* @return*/@GetMapping("path4/*/path4")public String path4() {return "path4";}/***  ant_path_matcher 不支持如下的 url 访问*  非 ant_path_matcher 启动直接报错* @return*/
//    @GetMapping("path5/**/path5")
//    public String path5() {
//        return "path5";
//    }@GetMapping("path6/{id}/{name}")public String path6(String id, String name) {return "path6: " + id + " : " + name;}@GetMapping("path7/{named:[a-z]+}")public String path7(String named) {return "path7: " + named;}@GetMapping("path8/{*named8}")public String path8(String named8) {return "path8: " + named8;}}

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

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

相关文章

SpringBoot之整合WebSocket服务并兼容IE8浏览器的方式

SpringBoot之整合WebSocket服务并兼容IE8浏览器的方式 文章目录 SpringBoot之整合WebSocket服务并兼容IE8浏览器的方式1. web-socket-js1.下载web-socket-js2. 配置 2. FlashSocket安全服务策略文件843端口配置1. 配置方式1_xxx.xml配置方式1. 编写flash843端口监听类2. Spring…

wordpress免费主题模板

免费大图wordpress主题 首页是一张大图的免费wordpress主题模板。简洁实用,易上手。 https://www.jianzhanpress.com/?p5857 wordpress免费模板 动态效果的wordpress免费模板,banner是动态图片效果,视觉效果不错。 https://www.jianzhan…

【深度学习】SSD 神经网络:彻底改变目标检测

一、说明 Single Shot MultiBox Detector (SSD) 是一项关键创新,尤其是在物体检测领域。在 SSD 出现之前,对象检测主要通过两阶段过程执行,首先识别感兴趣的区域,然后将这些区域分类为对象类别。这种方法虽…

RT-Thread 时钟 timer delay 相关

前言 此处,介绍对delay 时钟 timer 这几部分之间的关联和相关的知识点;本来只是想介绍一下 delay的,但是发现说到delay 不先 提到 先验知识 晶振\时钟\时钟节拍\定时器 好像没法解释透彻,所以就变成了 晶振\时钟\时钟节拍\定时器\delay 的很简单的概括一遍;并附带上能直接运行的…

Vue解决接口跨域

Vue解决接口跨域 一、vue.config.js配置文件二、全局路径 一、vue.config.js配置文件 const { defineConfig } require(vue/cli-service) module.exports defineConfig({transpileDependencies: true,//解决跨域devServer:{proxy:http://127.0.0.1:8888} })二、全局路径 im…

反序列化 [NPUCTF2020]ReadlezPHP1

打开题目 直接查看源代码 打开源代码发现了个./time.php?source 访问一下 审计代码: 现存在反序列化语句:$ppp unserialize($_GET["data"]);和执行漏洞:echo $b($a); 发现在__destruct()方法里面有 echo $b($a); 这个是php的…

Day4 javaweb开发——事务管理AOP

事务管理 事务是一组操作的集合,是一个不可分割的工作单位,这些操作要么同时成功,要么同时失败。 开启事务 start transaction / begin提交事务 commit回滚事务 rollback 删除部门时,要同时删除该部门下的员工 Transactional 注…

Stable Diffusion 模型分享:A-Zovya RPG Artist Tools(RPG 大师工具箱)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 A-Zovya RPG Artist Tools 模型是一个针对 RPG 训练的一个模型,可以生成一些 R…

基于springboot+vue的靓车汽车销售网站(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

Shiro 1.2.4反序列化漏洞

一、shiro描述 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序 二、漏洞原理 AES加密的密钥Key被硬…

python递归算法

递归算法 一、嵌套调用的过程二、递归的基本原则1、递归的基本原则2、无限递归调用3、正常递归调用4、阶乘问题5、力扣:231. 2 的幂6、力扣面试题 08.05. 递归乘法7、力扣、326. 3 的幂8、力扣342. 4的幂 一、嵌套调用的过程 def show1():print("show 1 run s…

自学Python第十八天-自动化测试框架(二):DrissionPage、appium

自学Python第十八天-自动化测试框架(二):DrissionPage、appium DrissionPage环境和安装配置准备工作简单的使用示例控制浏览器收发数据包模式切换 浏览器模式创建浏览器对象访问页面加载模式none 模式技巧 获取页面信息页面交互查找元素ele()…

uniapp腾讯地图JavaScript Api,H5端和原生APP端可用

因项目需要,在uniapp中集成使用腾讯地图,为了方便维护,希望通过一套代码实现H5和APP同时可用。H5显示相对简单,APP端比较麻烦,记录下实现过程 一、集成步骤 1.使用 renderjs script标签使用renderjs,因为…

一文了解LM317T的引脚介绍、参数解读

LM317T是一种线性稳压器件,它具有稳定输出电压的特性。LM317T可以通过调整其输出电阻来确保输出电压的稳定性,因此被广泛应用于各种电子设备中。 LM317T引脚图介绍 LM317T共有3个引脚,分别是: 输入引脚(输入电压V_in&…

软件应用场景,物流货运配货单打印模板软件单据打印查询管理系统软件教程

软件应用场景,物流货运配货单打印模板软件单据打印查询管理系统软件教程 一、前言 以下软件以 佳易王物流快运单打印查询管理系统软件V17.1 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、打印模式可以分为 直打模式和套打模式 直打模…

MySQL-----多表操作

介绍 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系,接下来我们将在单表的基础上,一起学习多表方面的知识。 一 多…

CentOS 7更换yum源|详细步骤

安装httpd时说获取不到httpd需要的安装包,就知道又是yum源的问题,按照下面的步骤更换yum源,亲测有效! 1、先备份/etc/yum.repos.d/CentOS-Base.repo文件,以防文件修改出问题后无法复原。 cd /etc/yum.repos.d mv Cent…

使用HiveMQ实现Android MQTT

MQTT官网:https://mqtt.org/ 百度Android MQTT,或者B站上搜索,发现大多使用https://github.com/eclipse/paho.mqtt.android,这是Eclipse的一个Android MQTT客户端实现库,但是我发现这个库在运行到高版本的手机上时报错…

自动驾驶中的障碍物时间对齐法

描述 自动驾驶算法使用的系统往往不是实时系统,因此每个节点间拿到的数据可能不是同一时间的数据,从而造成系统误差,针对这一现象,工程上往往采用时间对齐内插外推法。这里我们用感知障碍物来举例。 自动驾驶系统有许多重要模块…

Rust核心:【所有权】相关知识点

rust在内存资源管理上采用了(先进优秀?算吗)但特立独行的设计思路:所有权。这是rust的核心,贯穿在整个rust语言的方方面面,并以此为基点来重新思考和重构软件开发体系。 涉及到的概念点:借用&am…