引言
在springboot 1.x 版本的时候,如果要制定访问规则,例如:*.action 这种格式,只需要在配置文件中进行如下配置即可:
server.servlet.path=*.action
但是,到了springboot2.x版本,使用过的兄弟们会发现,这个配置方式被划了一横,表示已经被废弃了,那么今天,就告诉大家,怎么通过配置,达到配置规则这个目的。
解决方式
首先,要明确的是,web有三大组件,Linstener -> Fliter -> Servlet,其中,servlet用于:接受请求、处理请求、返回响应我们可以从这点入手。
在springboot的依赖中,找到 ServletRegistrationBean 这个类,随即下载源码,可以找到其中的一个方法。
/**
* Add URL mappings, as defined in the Servlet specification, for the servlet.
* @param urlMappings the mappings to add
* @see #setUrlMappings(Collection)
*/
public void addUrlMappings(String... urlMappings) {
Assert.notNull(urlMappings, "UrlMappings must not be null");
this.urlMappings.addAll(Arrays.asList(urlMappings));
}
由注释不难看出,添加一个或者多个url映射,不难看出他的参数是可以是多个,那么,我们通过改写配置调用这个方法,或许可以达到我们的目的。
重写配置
首先,新建一个java类,我这里命名为:Myconfig
package com.jackosn.config;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.DispatcherServlet;
@Configuration
public class MyConfig {
@Bean
public ServletRegistrationBean MyBean(){
ServletRegistrationBean bean = new ServletRegistrationBean();
bean.addUrlMappings("*.action","*.aaa");
return bean;
}
}
代码比较简单,大家看看就好啦。
讲道理,这样子就可以达到我们的目的,但是在启动的时候呢,报错了。
Servlet must not be null
转念一想,可能需要把Servlet当成参数传进去,所以,改写配置类如下:
package com.jackosn.config;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.DispatcherServlet;
@Configuration
public class MyConfig {
@Bean
public ServletRegistrationBean MyBean(DispatcherServlet servlet){
ServletRegistrationBean bean = new ServletRegistrationBean(servlet);
bean.addUrlMappings("*.action","*.aaa");
return bean;
}
}
以上。
祝大家敲码愉快~