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种实现方案给大家进行了处理,以后如果你的项目中有这种特殊的需求,现在知道该怎么做了吧?

今日小作业:

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

相关文章
|
7月前
|
Java 容器
SpringBoot读取resources下的文件以及resources的资源路径
SpringBoot读取resources下的文件以及resources的资源路径
156 0
|
5月前
|
存储 前端开发 Java
SpringBoot使用云端资源url下载文件的接口写法
在Spring Boot中实现从云端资源URL下载文件的功能可通过定义REST接口完成。示例代码展示了一个`FileDownloadController`,它包含使用`@GetMapping`注解的方法`downloadFile`,此方法接收URL参数,利用`RestTemplate`下载文件,并将文件字节数组封装为`ByteArrayResource`返回给客户端。此外,通过设置HTTP响应头,确保文件以附件形式下载。这种方法适用于从AWS S3或Google Cloud Storage等云服务下载文件。
476 7
|
3月前
|
Java Spring
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
本文介绍了Spring Boot中静态资源的访问位置、如何进行静态资源访问测试、自定义静态资源路径和静态资源请求映射,以及如何处理自定义静态资源映射对index页面访问的影响。提供了两种解决方案:取消自定义静态资源映射或编写Controller来截获index.html的请求并重定向。
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
|
4月前
|
前端开发 API
【API管理 APIM】APIM中如何配置使用URL路径的方式传递参数(如由test.htm?name=xxx 变为test\xxx)
【API管理 APIM】APIM中如何配置使用URL路径的方式传递参数(如由test.htm?name=xxx 变为test\xxx)
|
5月前
|
Java
自主定义访问路径-----SpringBoot自主定义静态资源访问路径的方法
自主定义访问路径-----SpringBoot自主定义静态资源访问路径的方法
|
6月前
|
前端开发 Java 开发者
在Spring框架中,`PathMatcher`是用于进行URL路径匹配的接口
在Spring框架中,`PathMatcher`是用于进行URL路径匹配的接口
160 6
|
5月前
|
Java 文件存储
软件开发常用之SpringBoot文件上传和下载功能(上){fileName},利用hutool提供的依赖,拿到当前目录的路径,System.getProperty从变量获取路径 ,不存在就用mkdi
软件开发常用之SpringBoot文件上传和下载功能(上){fileName},利用hutool提供的依赖,拿到当前目录的路径,System.getProperty从变量获取路径 ,不存在就用mkdi
|
6月前
|
Java
SpringBoot修改访问路径
SpringBoot修改访问路径
|
7月前
|
JSON 前端开发 Java
SpringBoot之JSON参数,路径参数的详细解析
SpringBoot之JSON参数,路径参数的详细解析
147 0
|
7月前
|
Java
SpringBoot配置图片访问404SpringBoot配置图片访问路径springboot如何访问图片
SpringBoot配置图片访问404SpringBoot配置图片访问路径springboot如何访问图片
75 0
下一篇
无影云桌面