程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • SpringMVC

    • SpringMVC 入门
    • Spring MVC 数据接收
    • Spring MVC 数据返回
    • Spring MVC 路径匹配规则
      • 1. 自定义路径匹配配置
      • 2. 路径匹配配置示例
      • 3. 关键配置参数说明
        • 3.1 禁用后缀模式匹配(setUseSuffixPatternMatch)
        • 3.2 启用尾部斜杠匹配(setUseTrailingSlashMatch)
        • 3.3 为控制器添加路径前缀(addPathPrefix)
      • 4. 示例应用与测试
        • 4.1 创建控制器
        • 4.2 启动应用并测试
      • 5. 常见的路径前缀配置冲突
    • Spring MVC 内容协商策略
    • Spring MVC 异步请求处理
    • Spring MVC 静态资源处理
    • Spring MVC 自定义格式化器
    • SpringMVC 自定义拦截器
    • SpringMVC 配置跨域(CORS)
    • Spring MVC 自定义视图控制器
    • Spring MVC 自定义视图解析器
    • Spring MVC 自定义方法参数解析器
    • Spring MVC 自定义返回值处理器
    • Spring MVC 自定义消息转换器
    • Spring MVC 消息转换器扩展
    • Spring MVC 自定义异常处理器
    • Spring MVC 自定义异常处理器扩展
  • SpringMVC
  • SpringMVC
scholar
2024-08-17
目录

Spring MVC 路径匹配规则

# Spring MVC 路径匹配规则

前言

在 Spring MVC 中,路径匹配规则决定了 URL 请求如何映射到控制器方法。通过实现 WebMvcConfigurer 接口,可以灵活地自定义这些规则。

# 1. 自定义路径匹配配置

在路径匹配配置中,通常会涉及以下几个关键点:

  • 后缀匹配(Suffix Pattern Match):是否允许通过路径后缀进行模糊匹配,如 /user 是否匹配 /user.json。
  • 尾部斜杠匹配(Trailing Slash Match):是否将 /user 和 /user/ 视为相同路径。
  • 统一路径前缀(Path Prefix):为所有或部分控制器添加路径前缀,如 /api 或 /v1,用于 API 版本管理或模块化设计。

# 2. 路径匹配配置示例

@Configuration // 标识为Spring配置类
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        // 禁用后缀模式匹配,避免 URL 后缀被误认为路径的一部分
        configurer.setUseSuffixPatternMatch(false);
        
        // 启用尾部斜杠匹配,让 /user 和 /user/ 被视为相同路径
        configurer.setUseTrailingSlashMatch(true);
        
        // 为所有控制器的路径添加统一的 /api 前缀
        configurer.addPathPrefix("api", c -> true);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 3. 关键配置参数说明

# 3.1 禁用后缀模式匹配(setUseSuffixPatternMatch)

  • 默认行为:Spring MVC 默认会对 URL 路径的后缀进行模糊匹配,例如 /user 可以匹配到 /user.json、/user.xml 等。
  • 推荐配置:出于安全考虑以及避免路径匹配的歧义,通常建议禁用后缀模式匹配。
// 禁用后缀匹配,增强 URL 路径的安全性和明确性
configurer.setUseSuffixPatternMatch(false);
1
2

# 3.2 启用尾部斜杠匹配(setUseTrailingSlashMatch)

  • 作用:启用后,/user 和 /user/ 会被视为相同的路径,增强了 URL 的容错性。
  • 推荐配置:在大多数场景中,建议启用尾部斜杠匹配,以提高用户访问的灵活性。
// 启用尾部斜杠匹配,路径对斜杠不敏感
configurer.setUseTrailingSlashMatch(true);
1
2

# 3.3 为控制器添加路径前缀(addPathPrefix)

  • 作用:通过为控制器添加路径前缀,可以轻松为应用中的所有或部分 API 统一添加前缀,如版本号 (/v1/) 或 /api/。这在构建具有清晰 URL 结构的 RESTful API 时特别有用。
  • 注意事项:该配置仅影响控制器的路径,不影响静态资源路径。
// 为所有控制器添加 /api 前缀,通常用于 API 版本控制或模块化设计
configurer.addPathPrefix("api", c -> true);
1
2

# 4. 示例应用与测试

# 4.1 创建控制器

@RestController // 标识为 REST 控制器,返回 JSON 数据
@RequestMapping("/test") // 基础路径 /api/test
public class TestController {

    @GetMapping("/hello") // 实际访问路径为 /api/test/hello
    public String sayHello() {
        return "Hello, Spring MVC!";
    }
}
1
2
3
4
5
6
7
8
9

# 4.2 启动应用并测试

启动 Spring Boot 应用后,使用浏览器或 Postman 访问以下地址进行测试:

  • 访问路径:http://localhost:8080/api/test/hello

预期结果:返回 "Hello, Spring MVC!",表示路径匹配配置已生效。

# 5. 常见的路径前缀配置冲突

在 Spring Boot 中,有两种常见的路径前缀配置:

  1. 上下文路径前缀(server.servlet.context-path):影响应用中所有的 URL 路径,包括静态资源。

    • 配置示例:server.servlet.context-path=/app
    • 访问路径示例:http://localhost:8080/app/api/test/hello
  2. 控制器路径前缀(addPathPrefix):仅影响控制器的路径。

    • 配置示例:configurer.addPathPrefix("/api", c -> true)
    • 访问路径示例:http://localhost:8080/app/api/test/hello

注意:如果两者同时使用,路径会叠加。

总结

  1. 路径匹配配置在 Spring MVC 中非常灵活,可以根据需求定制不同的匹配策略。
  2. 推荐禁用后缀匹配和启用尾部斜杠匹配,以确保 URL 的清晰性和一致性。
  3. 使用路径前缀配置可以帮助构建清晰的 API 路径结构,特别是在 RESTful API 开发中非常有用。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
Spring MVC 数据返回
Spring MVC 内容协商策略

← Spring MVC 数据返回 Spring MVC 内容协商策略→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式