欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Spring Boot学习总结】11.Web开发-自定义Spring MVC配置

程序员文章站 2022-07-12 19:50:42
...

上一篇介绍了使用Spring Boot进行自定义消息转换器的配置,而通过前面的几篇我们知道,Spring Boot帮我们自动配置了许多配置,大部分是使用Java类配置的方式进行的。在实际的Web开发中,负责请求响应处理的Spring MVC的配置很重要。一般根据需要,还是有许多地方需要由开发人员来定义的(例如拦截器,静态资源配置等),此时我们依然可以使用Spring Boot的Java类配置方式来完成相关配置。

使用Java类配置Spring MVC的相关配置项,需要通过继承WebMvcConfigureAdapter父类,然后重写父类中的方法进行拓展:

package cn.springboot.test;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration //声明这是一个配置
public class MySpringMVCConfiguration extends WebMvcConfigurerAdapter {
    
}

我们使用Eclipse的继承方法选择器,来看一下有多少个我们可以重写的方法:
【Spring Boot学习总结】11.Web开发-自定义Spring MVC配置
【Spring Boot学习总结】11.Web开发-自定义Spring MVC配置
我们可以看到,允许我们自定义配置的重写方法有许多,其中包括:
ArgumentResolvers:自定义参数解析器
CorsMappings:HTTP访问控制(CORS)映射,用来解决跨域问题
Formatters:类型转换器
Interceptors:拦截器
ResourceHandlers:静态资源处理器
ReturnValueHandlers:返回值处理器
ViewControllers:简单视图跳转器
AsyncSupport:异步支持配置
ContentNegotiation:内容协商器(基于内容协商多视图)
DefaultServletHandling:静态资源访问处理器
HandlerExceptionResolvers:全局异常捕获器
MessageConverters:消息转换器
PathMatch:URL匹配规则定义
ViewResolvers:视图解析器
MessageCodesResolver:错误码生成器
Validator:数据校验器

下面我们测试一下,在MySpringMVCConfiguration类中重写addInterceptors方法,来配置一个自定义拦截器。
首先编写一个简单的拦截器类MyInterceptor,该类实现了HandlerInterceptor接口:

package cn.springboot.test;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class MyInterceptor implements HandlerInterceptor{

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
            Object handler) throws Exception {
        System.out.println("拦截器开启......");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response,
            Object handler, ModelAndView modelAndView) throws Exception {
        // TODO Auto-generated method stub
        
    }
    
    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        // TODO Auto-generated method stub
        
    }
}

分别实现了拦截一个请求的“前置处理”、“请求处理”、“后置处理”三个方法,这里简单的在前置处理方法中打印一段话,证明进入了拦截器,并返回true放行。然后我们在MySpringMVCConfiguration类中重写addInterceptors方法,将上面自定义的拦截器类配置进去:

package cn.springboot.test;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration //声明这是一个配置
public class MySpringMVCConfiguration extends WebMvcConfigurerAdapter {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        MyInterceptor myInterceptor = new MyInterceptor();
        registry.addInterceptor(myInterceptor).addPathPatterns("/**");
        super.addInterceptors(registry);
    }    
}

这里我们将自定义拦截器MyInterceptor配置进InterceptorRegistry拦截器注册类,然后定义了拦截的访问路径为“/**”,意味着拦截所有的请求。
而该MVC配置类生效的原因,正是因为我们的核心启动类中的@SpringBootApplication注解的扫描包,会扫描同级和子包下的所有配置类,并加载这些配置类。

我们重启Spring Boot项目,然后访问之前我们编写的hello服务:
【Spring Boot学习总结】11.Web开发-自定义Spring MVC配置
我们会发现控制台打印了拦截器的前置处理方法中的语句,说明我们的拦截器配置成功。

其它的配置方式,其实和传统的XML配置类似,只不过使用了更简洁,更好理解的Java类的配置来完成的。我们可以根据自己的需要,在自定义Spring MVC配置类中进行相关处理器以及参数的配置。


参考:
传智播客《Spring Boot实战与原理分析》视频课程
(https://pan.baidu.com/s/1o9M2bGI 密码:jxg8)

转载请注明出处:https://blog.csdn.net/acmman/article/details/82285783