上一篇已经介绍了关于springboot的入门,执行启动类后我们发现springboot已经集成了springMVC的功能。但大多数情况下我们还需要对springBoot默认配置进行修改
通过查看springboot的官方文档有这么一段话---段落标题:27.1.1 Spring MVC Auto-configuration
这段的翻译
如果你想要保持Spring Boot 的一些默认MVC特征,同时又想自定义一些MVC配置(包括:拦截器,格式化器, 视图控制器、消息转换器 等等),你应该让一个类实现WebMvcConfigurer
,并且添加@Configuration
注解,但是千万不要加@EnableWebMvc
注解。如果你想要自定义HandlerMapping
、HandlerAdapter
、ExceptionResolver
等组件,你可以创建一个WebMvcRegistrationsAdapter
实例 来提供以上组件。
如果你想要完全自定义SpringMVC,不保留SpringBoot提供的一切特征,你可以自己定义类并且添加@Configuration
注解和@EnableWebMvc
注解
现在我们来自定义部分SpringMVC配置试一试,条件:自定义一个类实现WebMvcConfigurer
并添加@Configuration
注解
首先自定义一个拦截器
package com.jackzou.interceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @描述 TODO
* @作者 zouss
* @创建时间 2018/9/17 15:35
* @版本: 1.0
**/
@Configuration
public class TestInterceptor implements HandlerInterceptor {
private final Logger logger = LoggerFactory.getLogger(TestInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
logger.debug("preHandle method is running");
logger.info("hello{235}");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
logger.debug("postHandle method is running");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
logger.debug("afterCompletion method is running");
}
}
然后新建一个SpringMVC的配置类,上文说道部分配置的话只需要实现WebMvcConfigurer
,将拦截器注册到spring容器中去。
重写接口中的addInterceptors方法,添加自定义的拦截器,通过registery来注册拦截器,用过addPathPatterns来添加路径。
package com.jackzou.configure;
import com.jackzou.interceptor.TestInterceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @描述 部分配置MVC的拦截器
* @作者 zouss
* @创建时间 2018/9/17 0017 15:50
* @版本: 1.0
**/
@Configuration
public class MvcConfig implements WebMvcConfigurer {
private Logger logger = LoggerFactory.getLogger(MvcConfig.class);
/**
* 通过@Bean注解,将我们定义的拦截器注册到Spring容器
*
* @return
*/
@Bean
public TestInterceptor testInterceptor() {
return new TestInterceptor();
}
/**
* 重写接口中的addInterceptors方法,添加自定义拦截器
*
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
logger.debug("preHandle method is running");
// 通过registry来注册拦截器,通过addPathPatterns来添加拦截路径
registry.addInterceptor(this.testInterceptor()).addPathPatterns("/**");
}
}
controller层简示例,以便能够在页面上展示
package com.jackzou.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @描述 TODO
* @作者 zouss
* @创建时间 2018/9/14 15:26
* @版本: 1.0
**/
@RestController
public class HelloController {
@GetMapping(value = "hello")
public String HelloController() {
return "Hello SpringBoot !";
}
}
执行启动类
然后在浏览器输入:http://localhost:8080/hello
当我们发送请求后发现idea的命令台上多了这么几行
这是我们自定义的拦截器。当然springboot默认的日志输出是不会显示debug的这里需要你自己去更改下配置,我的配置文件是
application.properties,如果你的是yml格式的话请参照修改
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/mysql_pritice
jdbc.username=root
jdbc.password=root
# 设置com.jackzou包的日志级别为debug
logging.level.com.jackzou.configure=debug
logging.level.com.jackzou.interceptor=debug