本文首发于个人网站: Spring Boot 实战之定制 URL 匹配规则 http://www.javaadu.online/?p=649
构建 web 应用程序时, 并不是所有的 URL 请求都遵循默认的规则. 有时, 我们希望 RESTful URL 匹配的时候包含定界符 ".", 这种情况在 Spring 中可以称之为 "定界符定义的格式"; 有时, 我们希望识别斜杠的存在. Spring 提供了接口供开发人员按照需求定制.
在之前的几篇文章中, 可以通过 WebConfiguration 类来定制程序中的过滤器, 格式化工具等等, 同样得, 也可以在这个类中用类似的办法配置 "路径匹配规则".
假设 ISBN 格式允许通过定界符 "." 分割图书编号和修订号, 形如 [isbn-number].[revision]
实战
在 WebConfiguration 类中添加对应的配置, 代码如下:
- @Override
- public void configurePathMatch(PathMatchConfigurer configurer) {
- configurer.setUseSuffixPatternMatch(false).setUseTrailingSlashMatch(true);
- }
通过 mvn spring-boot:run 启动应用程序
访问
http://localhost:8080/books/9781-1234-1111.1
访问
http://localhost:8080/books/9781-1234-1111
分析
configurePathMatch(PathMatchConfigurer configurer) 函数让开发人员可以根据需求定制 URL 路径的匹配规则.
configurer.setUseSuffixPatternMatch(false) 表示设计人员希望系统对外暴露的 URL 不会识别和匹配. 后缀. 在这个例子中, 就意味着 Spring 会将 9781-1234-1111.1 当做一个 isbn * 参数传给 BookController.
configurer.setUseTrailingSlashMatch(true) 表示系统不区分 URL 的最后一个字符是否是斜杠 /. 在这个例子中, 就意味着
http://localhost:8080/books/9781-1234-1111
和
http://localhost:8080/books/9781-1234-1111/
含义相同.
如果需要定制 path 匹配发生的过程, 可以提供自己定制的 PathMatcher 和 UrlPathHelper, 但是这种需求并不常见.
Spring Boot 1.x 系列
Spring Boot 的自动配置, Command-line-Runner http://www.javaadu.online/?p=487
了解 Spring Boot 的自动配置 http://www.javaadu.online/?p=495
Spring Boot 的 @PropertySource 注解在整合 Redis 中的使用 http://www.javaadu.online/?p=499
Spring Boot 项目中如何定制 HTTP 消息转换器 http://www.javaadu.online/?p=515
Spring Boot 整合 MongoDB 提供 Restful 接口 http://www.javaadu.online/?p=518
Spring 中 bean 的 scope http://www.javaadu.online/?p=521
Spring Boot 项目中使用事件派发器模式 http://www.javaadu.online/?p=526
Spring Boot 提供 RESTful 接口时的错误处理实践 http://www.javaadu.online/?p=530
Spring Boot 实战之定制自己的 starter http://www.javaadu.online/?p=535
Spring Boot 项目如何同时支持 HTTP 和 HTTPS 协议 http://www.javaadu.online/?p=538
自定义的 Spring Boot starter 如何设置自动配置注解 http://www.javaadu.online/?p=546
Spring Boot 项目中使用 Mockito http://www.javaadu.online/?p=575
在 Spring Boot 项目中使用 Spock 测试框架 http://www.javaadu.online/?p=588
Spring Boot 项目中如何定制拦截器 http://www.javaadu.online/?p=590
Spring Boot 项目中如何定制 PropertyEditors http://www.javaadu.online/?p=593
Spring Boot 构建的 Web 项目如何在服务端校验表单输入 http://www.javaadu.online/?p=633
Spring Boot 应用的健康监控 http://www.javaadu.online/?p=637
Spring Boot 项目中如何定制 servlet-filters http://www.javaadu.online/?p=646
本号专注于后端技术, JVM 问题排查和优化, Java 面试题, 个人成长和自我管理等主题, 为读者提供一线开发者的工作和成长经验, 期待你能在这里有所收获.
来源: http://www.bubuko.com/infodetail-3280497.html