2021-10-08

Spring源码系列(一):WebMvcConfigurer

@[TOC](文章目录)

前言

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)
这个方法可以自定义写拦截器,并指定拦截路径。

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle,run");
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request,
                           HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle,run");
    }
    @Override
    public void afterCompletion(HttpServletRequest request,
                                HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion,run");
    }
}

配置如下:

@Configuration
public class MyConfigurer implements WebMvcConfigurer {
    @Bean
    public MyInterceptor getMyInterceptor(){
        return  new MyInterceptor();
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(this.getMyInterceptor())
        .addPathPatterns("/abc","/configurePathMatch");
    }
}

7.addResourceHandlers(ResourceHandlerRegistry registry)
自定义资源映射。自己的服务器作为文件服务器,不利用第三方的图床,就需要一个虚拟路径映射到我们服务器的地址。值得一提的是,如果你的项目是war包启动,一般都是再Tomcat中配置一下;如果是jar包启动,就可以用到这个方法了。

public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/my/**")
    .addResourceLocations("file:E:/my/");
    super.addResourceHandlers(registry);
}

8.addCorsMappings(CorsRegistry registry)
这个是设置跨域问题的,几乎是每个后台服务器都需要配置的东西。

@Configuration                                                                  
public class WebConfig implements WebMvcConfigurer {                            
	@Override                                                                   
	public void addCorsMappings(CorsRegistry registry) {                        
                                                                                
		registry.addMapping("/**")                                              
				.allowedOrigins("*")                                           
				.allowedMethods("GET","POST","PUT","OPTIONS","DELETE","PATCH") 
				.allowedHeaders("*")                                           
				.allowCredentials(true)                                        
				.maxAge(3600);                                                 
	}                                                                           
                                                                                
}              

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值