Spring Boot:定制URL匹配规则

构建web应用程序时,并不是所有的URL请求都遵循默认的规则。有时,我们希望RESTful URL匹配的时候包含定界符“.”,这种情况在Spring中可以称之为“定界符定义的格式”;有时,我们希望识别斜杠的存在。Spring提供了接口供开发人员按照需求定制。

在之前的几篇文章中,可以通过WebConfiguration类来定制程序中的过滤器、格式化工具等等,同样得,也可以在这个类中用类似的办法配置“路径匹配规则”。

假设ISBN格式允许通过定界符“.”分割图书编号和修订号,形如[isbn-number].[revision]

How Do

  • 在WebConfiguration类中添加对应的配置,代码如下:
@Overridepublic
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

使用正确的URL访问的结果

分析

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-1111http://localhost:8080/books/9781-1234-1111/含义相同。

如果需要定制path匹配发生的过程,可以提供自己定制的PathMatcherUrlPathHelper,但是这种需求并不常见。

时间: 2024-11-02 09:16:37

Spring Boot:定制URL匹配规则的相关文章

Spring Boot 定制URL匹配规则的方法

事情的起源:有人问我,说编写了一个/hello访问路径,但是吧,不管是输入/hello还是/hello.html,还是/hello.xxx都能进行访问.当时我还以为他对代码进行处理了,后来发现不是,后来发现这是Spring Boot路由规则.好了,有废话了下,那么看看我们解决上面这个导致的问题. 构建web应用程序时,并不是所有的URL请求都遵循默认的规则.有时,我们希望RESTful URL匹配的时候包含定界符".",这种情况在Spring中可以称之为"定界符定义的格式&q

Spring Data JPA方法定义规范【从零开始学Spring Boot】

视频&交流平台] à SpringBoot网易云课堂视频 http://study.163.com/course/introduction.htm?courseId=1004329008 à Spring Boot交流平台 http://412887952-qq-com.iteye.com/blog/2321532           事情的起因:有人问过我们这个这个问题:为什么我利用Spring data jpa写的方法没有按照我想要的情况进行执行呢?我记得当时只是告诉他你你先看看Spring

Spring Boot:定制static path mappings

在Spring Boot:定制URL匹配规则一文中我们展示了如何调整URL请求匹配到对应的控制器方法的规则.类似得,也可以控制应用程序对静态文件(前提是被打包进部署包)的处理. 假设我们需要通过URLhttp://localhost:8080/internal/application.properties对外暴露当前程序的配置. How Do 在WebConfiguration类中添加相应的配置,代码如下: @Overridepublic void addResourceHandlers(Res

《Spring Boot Cookbook》阅读笔记

声明1:该系列教程已经在极客学院上线:spring-boot cookbook 声明2:本博客文章需征得作者同意后方可转载 作为后端开发,Spring Boot值得拥有 从技术雷达 : 关于技术趋势的分析报告和Profile of successful Java developer in 2016这两篇文章中都可以看出,作为Java开发人员,Spring Boot已经成为你不得不尽快补充的一项技能. 最近一个月一直在学习Spring Boot框架,在阅读<Spring Boot Cookbook

Spring Boot:定制PropertyEditors

在Spring Boot: 定制HTTP消息转换器一文中我们学习了如何配置消息转换器用于HTTP请求和响应数据,实际上,在一次请求的完成过程中还发生了其他的转换,我们这次关注将参数转换成多种类型的对象,如:字符串转换成Date对象或字符串转换成Integer对象. 在编写控制器中的action方法时,Spring允许我们使用具体的数据类型定义函数签名,这是通过PropertyEditor实现的.PropertyEditor本来是JDK提供的API,用于将文本值转换成给定的类型,结果Spring的

57. Spring 自定义properties升级篇【从零开始学Spring Boot】

 注解ConfigurationProperties和EnableAutoConfiguration的区别: @EnableConfigurationProperties tells Spring to treat this class as a consumer of application.yml/properties values( {@link ConfigurationProperties} beans can be registered in the standard way (fo

《Spring Boot官方指南》28.安全

28. 安全 如果Spring Security位于类路径上,那么Web应用程序将默认使用所有HTTP端点上的'basic'身份验证.要向Web应用程序添加方法级安全性,还可以为你想要的设置添加"@EnableGlobalMethodSecurity".通过点击Spring Security Reference能够找到更多的信息. 'AuthenticationManager' 有一个默认用户(用户名为'user' ,密码随机,在应用程序启动时在INFO级别输出) Using defa

《Spring Boot官方指南》(二)入门(二)

3.2.5 命令行补全工具 Spring Boot CLI附带了一些脚本,这些脚本为BASH 和zsh提供了命令行补全功能.在任何shell里面都可以source到这些脚本(也叫spring),也可以初始化到个人或者系统级别的命令行工具里面.在Debian系统里面,系统级别的脚本在这个路径:/shell-completion/bash,shell程序启动以后,这里面的所有脚本都可以执行.例如,您已经使用SDKMAN!安装了这些脚本,为了手动执行他们,可以这样操作: $ . ~/.sdkman/c

Spring Boot Admin的使用

上一篇文章中了解了Spring Boot提供的监控接口,例如:/health./info等等,实际上除了之前提到的信息,还有其他信息业需要监控:当前处于活跃状态的会话数量.当前应用的并发数.延迟以及其他度量信息.这次我们了解如何利用Spring-boot-admin对应用信息进行可视化,如何添加度量信息. 准备 spring-boot-admin的Github地址在:https://github.com/codecentric/spring-boot-admin,它在Spring Boot Ac