SpringBoot2.x系列教程17--SpringBoot中对URL路径规则的特殊匹配实现方案

简介: 前言在前面的章节中,壹哥 带大家对JSON进行了序列化和反序列化的特殊处理,但是我们开发时,不仅仅JSON需要特殊处理,有时候就连我们的URL接口地址中也有需要特殊处理的地方。比如,在一个URL中,“.” 字符一般是作为分隔符来定义格式的,例如/projects/spring-boot.json中的 “点” ,那么如果在URL带有这个 ”.“,我们要不要做特殊的处理呢?另外有的人在访问URL时,可能会在尾部带有一个”/“,如果我们想识别URL路径尾部的斜杠,如“/home/”中的第2个 “/”,该怎么办?这些都是一些比较特殊的需求,那么我们要不要处理呢?接下来 壹哥 就教各位把U

前言

在前面的章节中,壹哥 带大家对JSON进行了序列化和反序列化的特殊处理,但是我们开发时,不仅仅JSON需要特殊处理,有时候就连我们的URL接口地址中也有需要特殊处理的地方。

比如,在一个URL中,“.” 字符一般是作为分隔符来定义格式的,例如/projects/spring-boot.json中的 “点” ,那么如果在URL带有这个 ”.“,我们要不要做特殊的处理呢?

另外有的人在访问URL时,可能会在尾部带有一个”/“,如果我们想识别URL路径尾部的斜杠,如“/home/”中的第2个 “/”,该怎么办?

这些都是一些比较特殊的需求,那么我们要不要处理呢?接下来 壹哥 就教各位把URL中的这种特殊符号给识别处理了。

一. URL路径匹配

1. 概述

在Spring Boot 1.5版本及以前,假如我们定义了一个’/show‘接口,默认情况下,我们可以通过/show来访问资源,也可以通过/show.do这样带有“.do”后缀的接口来访问资源。

但是到了Spring Boot 2.x之后,我们发现再使用.do这样的扩展名就无法访问资源了。

也就是说,现在的Spring Boot在默认情况下,禁用了后缀匹配模式!

但是我们在开发Web应用程序时,并不总是使用一些默认的配置。有时,我们要创建的URL接口中,可能会包含特别的字符 “.”,有时候我们也希望可以识别URL中的斜杠。这些需求,其实SpringBoot都为我们提供了解决方案,以便开发人员可以按需定制。

2. 需求说明

假如现在我们创建了一个如下的控制器接口:

@RestController@RequestMapping("/")
publicclassHelloController {
@RequestMapping("hello")
publicStringshowHello() {
return"Hello,一一哥Sun!";
    }
}

如果是在Spring Boot 1.x版本的控制器中,我们就可以使用下面的接口地址来进行访问资源。

/hello/hello.*

但是如果我们将工程升级到SpringBoot 2.x后,默认情况下我们只能使用/hello这个接口来访问资源,那么怎样才能像SpringBoot 1.x那样来访问呢?

接下来我就带大家在SpringBoot 2.x版本中实现自定义的URL路径匹配,处理URL请求中的特殊符号。

3. 自定义URL路径匹配规则实现方式

对上面提到的需求,这里我给大家提供了2种实现方案:

  • 1. 以代码配置实现方式;
  • 2. 以配置文件实现方式。

三. 以代码配置方式实现

1. 创建一个web项目(略)

首先我们还是创建一个新的项目模块,具体过程略,各位请参考之前的内容创建即可。

2. 实现方式

在以代码配置的实现方案里,我们又可以有2种具体的实现方式来实现:

  • 继承WebMvcConfigurerAdapter抽象类,重写configurePathMatch方法;
  • 继承WebMvcConfigurationSupport类,重写configurePathMatch方法。

上述两种方式的核心都是:

configurePathMatch(PathMatchConfigurerconfigurer)函数,让开发人员可以根据需求定制URL路径的匹配规则。setUseSuffixPatternMatch(booleanuseSuffixPatternMatch)
设置是否是后缀模式匹配,true即匹配。

核心开发步骤就是两步:

(1). 继承WebMvcConfigurationSupport;

(2). 重写configurePathMatch方法。

3. 具体实现过程

接下来我就把以WebMvcConfigurationSupport实现的方式给大家具体的展示出来。

3.1 创建WebMvcConfigurationSupport配置类

首先我们编写一个Config配置类,继承WebMvcConfigurationSupport,复写configurePathMatch()方法。

packagecom.yyg.boot.config;
importorg.springframework.context.annotation.Configuration;
importorg.springframework.core.Ordered;
importorg.springframework.web.servlet.config.annotation.PathMatchConfigurer;
importorg.springframework.web.servlet.config.annotation.ViewControllerRegistry;
importorg.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
importorg.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/*** @Description Description* @Author 一一哥Sun* @Date Created in 2020/3/21*/@ConfigurationpublicclassDefaultMvcConfigextendsWebMvcConfigurationSupport {
@OverrideprotectedvoidconfigurePathMatch(PathMatchConfigurerconfigurer) {
//setUseSuffixPatternMatch:设置是否遵循后缀匹配模式,如“/user”是否匹配/user.*,为true时就匹配;configurer.setUseSuffixPatternMatch(true)
//setUseTrailingSlashMatch,设置是否自动后缀留级匹配模式,如“/user”是否匹配“/user/”,为true是即匹配                .setUseTrailingSlashMatch(true);
    }
}

3.2 创建Controller接口

接着我们创建一个Controller接口,编写一个”/show“接口。

packagecom.yyg.boot.web;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.GetMapping;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.ResponseBody;
/*** @Description URL路径访问规则+内容协商管理* @Author 一一哥Sun* @Date Created in 2020/3/21*/@ControllerpublicclassWelcomeController {
/*** produces="application/json;charset=UTF-8":解决继承WebMvcConfigurationSupport类时中文乱码的问题.*/@ResponseBody@GetMapping(value="/show",produces="application/json;charset=UTF-8")
publicStringshowMsg() {
return"听一一哥讲解URL路径访问规则...";
    }
}

3.3 启动测试

启动项目后进行测试,在浏览器中输入地址:
http://localhost:8080/show.do

此时我们可以看到,即使我们带有".do"后缀,也可以访问对应的资源页面,但是在此之前是不可以的。

另外如果我们在浏览器中输入地址:
http://localhost:8080/show/

此时可以看到,即使我们带有"/show/"后缀,也可以访问页面。

4. 小结

抽象类WebMvcConfigurerAdapter与WebMvcConfigurationSupport都可以实现URL路径特殊符号的处理, WebMvcConfigurerAdapter中具有的功能,在WebMvcConfigurationSupport中也有,现在一般都建议使用WebMvcConfigurationSupport类。

四. 以配置文件方案实现

上面通过代码配置类的实现方案,其实是有点复杂的。在SpringBoot中,我们也可以在properties或yml配置文件中实现相同的效果,这种方式就会比较简单。

我们先把前面案例中配置类中的@Configuration注解先注释掉,使得之前的配置代码失效,接下来再创建一个application.properties配置文件。

1. 创建application.properties文件

#设置是否遵循后缀匹配模式,如“/user”是否匹配/user.* ,为true时就匹配;spring.mvc.pathmatch.use-suffix-pattern=true#设置是否自动匹配后缀模式,如“/user”是否匹配“/user/”,为true是即匹配spring.mvc.pathmatch.use-registered-suffix-pattern=false

2. 重启项目测试

接下来就直接重启项目,在浏览器中输入地址:
http://localhost:8080/show.dooo

2.1 测试/show.*模式

可以看到,此时即使我们带有".dooo"后缀,也可以访问页面。

2.2 测试/show/模式

在浏览器中输入地址:
http://localhost:8080/show/

可以看到,此时即使我们带有"/show/"后缀,也可以访问页面。

结语

至此,我就把URL中带有的特殊符号,通过2种实现方案给大家进行了处理,以后如果你的项目中有这种特殊的需求,现在知道该怎么做了吧?

今日小作业:

设计一个学生信息查询接口,处理该接口中的特殊符号。

相关文章
|
小程序 数据可视化 Java
Java+后端Spring boot 开发的全套UWB定位方案,0.1米高精度定位系统源码
UWB定位系统由硬件定位设备、定位引擎和应用软件组成。该定位系统应用软件支持PC端和移动端访问,并提供位置实时显示、历史轨迹回放、人员考勤、电子围栏、行为分析、智能巡检等功能。定位精度高达10cm,同时具备高动态、高容量、低功耗的优点。应用场景包括:隧道、化工、工厂、煤矿、工地、电厂、养老、展馆、整车、机房、机场等。
391 8
|
缓存 NoSQL Java
SpringBoot实现缓存预热的几种常用方案
SpringBoot实现缓存预热的几种常用方案
|
存储 前端开发 Java
SpringBoot使用云端资源url下载文件的接口写法
在Spring Boot中实现从云端资源URL下载文件的功能可通过定义REST接口完成。示例代码展示了一个`FileDownloadController`,它包含使用`@GetMapping`注解的方法`downloadFile`,此方法接收URL参数,利用`RestTemplate`下载文件,并将文件字节数组封装为`ByteArrayResource`返回给客户端。此外,通过设置HTTP响应头,确保文件以附件形式下载。这种方法适用于从AWS S3或Google Cloud Storage等云服务下载文件。
1349 7
|
决策智能 数据库 开发者
使用Qwen2.5+SpringBoot+SpringAI+SpringWebFlux的基于意图识别的多智能体架构方案
本项目旨在解决智能体的“超级入口”问题,通过开发基于意图识别的多智能体框架,实现用户通过单一交互入口使用所有智能体。项目依托阿里开源的Qwen2.5大模型,利用其强大的FunctionCall能力,精准识别用户意图并调用相应智能体。 核心功能包括: - 意图识别:基于Qwen2.5的大模型方法调用能力,准确识别用户意图。 - 业务调用中心:解耦框架与业务逻辑,集中处理业务方法调用,提升系统灵活性。 - 会话管理:支持连续对话,保存用户会话历史,确保上下文连贯性。 - 流式返回:支持打字机效果的流式返回,增强用户体验。 感谢Qwen2.5系列大模型的支持,使项目得以顺利实施。
4737 8
使用Qwen2.5+SpringBoot+SpringAI+SpringWebFlux的基于意图识别的多智能体架构方案
|
PHP Apache
【ThinkPHP框架教程·Part-04】URL访问模式
本章节介绍 ThinkPHP6.0 的 URL 访问模式,解析其访问方法。ThinkPHP 框架通过 URL 实现多种操作,默认为单应用模式。
【ThinkPHP框架教程·Part-04】URL访问模式
|
缓存 NoSQL Java
Spring Boot中的分布式缓存方案
Spring Boot提供了简便的方式来集成和使用分布式缓存。通过Redis和Memcached等缓存方案,可以显著提升应用的性能和扩展性。合理配置和优化缓存策略,可以有效避免常见的缓存问题,保证系统的稳定性和高效运行。
476 3
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
存储 NoSQL Java
Spring Boot项目中使用Redis实现接口幂等性的方案
通过上述方法,可以有效地在Spring Boot项目中利用Redis实现接口幂等性,既保证了接口操作的安全性,又提高了系统的可靠性。
726 1
|
JavaScript 前端开发 Java
SpringBoot_web开发-webjars&静态资源映射规则
https://www.91chuli.com/ 举例:jquery前端框架
234 0
|
消息中间件 NoSQL 安全
(转)Spring Boot加载 不同位置的 application.properties配置文件顺序规则
这篇文章介绍了Spring Boot加载配置文件的顺序规则,包括不同位置的application.properties文件的加载优先级,以及如何通过命令行参数或环境变量来指定配置文件的名称和位置。
997 0

热门文章

最新文章

下一篇
开通oss服务