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

java 复制代码
@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

java 复制代码
@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;
    }

}
相关推荐
Albert Edison2 小时前
【最新版】IntelliJ IDEA 2025 创建 SpringBoot 项目
java·spring boot·intellij-idea
Piper蛋窝3 小时前
深入 Go 语言垃圾回收:从原理到内建类型 Slice、Map 的陷阱以及为何需要 strings.Builder
后端·go
六毛的毛5 小时前
Springboot开发常见注解一览
java·spring boot·后端
AntBlack5 小时前
拖了五个月 ,不当韭菜体验版算是正式发布了
前端·后端·python
31535669135 小时前
一个简单的脚本,让pdf开启夜间模式
前端·后端
uzong6 小时前
curl案例讲解
后端
开开心心就好7 小时前
免费PDF处理软件,支持多种操作
运维·服务器·前端·spring boot·智能手机·pdf·电脑
一只叫煤球的猫7 小时前
真实事故复盘:Redis分布式锁居然失效了?公司十年老程序员踩的坑
java·redis·后端
猴哥源码7 小时前
基于Java+SpringBoot的农事管理系统
java·spring boot
大鸡腿同学7 小时前
身弱武修法:玄之又玄,奇妙之门
后端