WebMvcConfigurer的实现以及内部方法详解

背景:最近有个项目需要发表在websphere应用服务器上,但是was的版本不支持spring5.0。所以在使用springboot搭建项目的时候使用了springboot1.5.13版本,降级spring到4.0。在搭建项目框架过程中遇到了配置springMvc的问题。

	**为什么要使用WebMvcConfigurer?**
	
WebMvcConfigurer是一个接口,提供很多自定义的拦截器,例如跨域设置、类型转化器等等。可以说此接口为开发者提前想到了很多拦截层面的需求,方便开发者自由选择使用。由于Spring5.0废弃了WebMvcConfigurerAdapter,所以WebMvcConfigurer继承了WebMvcConfigurerAdapter大部分内容。

springboot2.0以前配置SpringMVC使用继承WebMvcConfigurerAdapter类来实现,那么在springboot2.0以后如何来配置WebMvcConfigurer呢?
我们可以采用两种方式来配置WebMvcConfigurer
1、JavaBean方式配置WebMvcConfigurer
2、WebMvcConfigurer实现类方式

方法一:JavaBean配置WebMvcConfigurer
采用javaBean方式我们只需要在WebMvcConfig类添加*@Configuration*注解,将该配置类托管给Spring IOC完成配置,代码配置如下所示:

@Configuration
public class WebMvcConfig {
    @Autowired
    private CrossInterceptor crossInterceptor;
    /**
     * 实例化WebMvcConfigurer接口
     * @return
     */
    @Bean
    public WebMvcConfigurer webMvcConfigurer(){
        return new WebMvcConfigurer() {
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                registry.addInterceptor(crossInterceptor).addPathPatterns("/**");
                log.debug("跨域拦截器注册成功!");
                registry.addInterceptor(new OptionsInterceptor()).addPathPatterns("/**");
                log.debug("Options请求拦截器注册成功!");
            }
        };
    }
}

通过@Bean注解的返回值来完成WebMvcConfigurer的配置实例化,在WebMvcConfigurer接口实例内调用addInterceptors方法完成添加拦截器配置。

方法二:实现类配置WebMvcConfigurer
创建一个名为WebConfiguration的配置类并且实现WebMvcConfigurer接口,代码如下所示:

@Configuration
public class WebConfiguration implements WebMvcConfigurer {
    @Autowired
    private CrossInterceptor crossInterceptor;
    
    /**
     * 重写添加拦截器方法并添加配置拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(crossInterceptor).addPathPatterns("/**");
    }
}

第二种方法可能与我们之前的方法较为相似。

接下来我们剖析一下WebMvcConfigurer内一些主要方法:
1.configurePathMatch(PathMatchConfigurer configurer)

这个用到的比较少,这个是和访问路径有关的。举个例子,比如说PathMatchConfigurer 有个配置是setUseTrailingSlashMatch(),如果设置为true的话(默认为true),后面加个斜杠并不影响路径访问,例如“/user”等同于“/user/"。我们在开发中很少在访问路径上搞事情,所以这个方法如果有需要的请自行研究吧。

2.configureContentNegotiation(ContentNegotiationConfigurer configurer)

这个东西直译叫做内容协商机制,主要是方便一个请求路径返回多个数据格式。ContentNegotiationConfigurer这个配置里面你会看到MediaType,里面有众多的格式。此方法不在多赘述。

3.configureAsyncSupport(AsyncSupportConfigurer configurer)

顾名思义,这是处理异步请求的。只能设置两个值,一个超时时间(毫秒,Tomcat下默认是10000毫秒,即10秒),还有一个是AsyncTaskExecutor,异步任务执行器。

4.configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer)

这个接口可以实现静态文件可以像Servlet一样被访问。

5.addFormatters(FormatterRegistry registry)

增加转化器或者格式化器。这边不仅可以把时间转化成你需要时区或者样式。还可以自定义转化器和你数据库做交互,比如传进来userId,经过转化可以拿到user对象。

6.addInterceptors(InterceptorRegistry registry)

这个方法你应该比较熟悉了,就是咱么用的最多的一个方法。这个方法可以自定义写拦截器,并指定拦截路径。

7.addResourceHandlers(ResourceHandlerRegistry registry)

自定义资源映射。这个东西也比较常用,业务场景就是自己的服务器作为文件服务器,不利用第三方的图床,就需要一个虚拟路径映射到我们服务器的地址。值得一提的是,如果你的项目是war包启动,一般都是再Tomcat中配置一下(配置方法请百度);如果是jar包启动(SpringBoot经常用这种方式启动),就可以用到这个方法了。

8.addCorsMappings(CorsRegistry registry)

这个是设置跨域问题的,几乎所有后台服务器都需要配置。

9.addViewControllers(ViewControllerRegistry registry)
这个方法可以实现一个路径自动跳转到一个页面。不过现在多为前后端分离的项目,可以把跳转路由的问题由前端来解决。

后面还有七个:configureViewResolvers、addArgumentResolvers、addReturnValueHandlers、configureMessageConverters、extendMessageConverters、configureHandlerExceptionResolvers、extendHandlerExceptionResolvers。用的太少,就不看了。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值