Spring Boot Web之配置接口WebMvcConfigurer 小鱼儿 2023-01-11 03:53 161阅读 0赞 # 1、前言 # **WebMvcConfigurer**配置接口,是Spring内部的一种配置方式,采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制。基于java-based方式的Spring MVC配置,需要开发者自行创建一个配置类并**实现WebMvcConfigurer接口。**WebMvcConfigurerAdapter 抽象类是对WebMvcConfigurer接口的简单抽象(增加了一些默认实现),但在在SpringBoot2.0及Spring5.0中WebMvcConfigurerAdapter已被废弃 。 # 2、实现方式 # 官方推荐直接实现WebMvcConfigurer或者直接继承WebMvcConfigurationSupport。 ## 方式一:实现WebMvcConfigurer接口【推荐使用】。 ## ## 方式二:继承WebMvcConfigurationSupport类。 ## package org.springframework.web.servlet.config.annotation; import java.util.List; import org.springframework.format.FormatterRegistry; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.lang.Nullable; import org.springframework.validation.MessageCodesResolver; import org.springframework.validation.Validator; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.HandlerMethodReturnValueHandler; import org.springframework.web.servlet.HandlerExceptionResolver; public interface WebMvcConfigurer { default void configurePathMatch(PathMatchConfigurer configurer) { } default void configureContentNegotiation(ContentNegotiationConfigurer configurer) { } default void configureAsyncSupport(AsyncSupportConfigurer configurer) { } default void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { } default void addFormatters(FormatterRegistry registry) { } default void addInterceptors(InterceptorRegistry registry) { } default void addResourceHandlers(ResourceHandlerRegistry registry) { } default void addCorsMappings(CorsRegistry registry) { } default void addViewControllers(ViewControllerRegistry registry) { } default void configureViewResolvers(ViewResolverRegistry registry) { } default void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) { } default void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) { } default void configureMessageConverters(List<HttpMessageConverter<?>> converters) { } default void extendMessageConverters(List<HttpMessageConverter<?>> converters) { } default void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) { } default void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) { } @Nullable default Validator getValidator() { return null; } @Nullable default MessageCodesResolver getMessageCodesResolver() { return null; } } 常见举例: /* 拦截器配置 */ void addInterceptors(InterceptorRegistry var1); /* 视图跳转控制器 */ void addViewControllers(ViewControllerRegistry registry); /***静态资源处理**/ void addResourceHandlers(ResourceHandlerRegistry registry); /* 默认静态资源处理器 */ void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer); /*** 这里配置视图解析器**/ void configureViewResolvers(ViewResolverRegistry registry); /* 配置内容裁决的一些选项*/ void configureContentNegotiation(ContentNegotiationConfigurer configurer); # 3、拦截器配置举例 # ## 1)controller ## import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api") public class HelloCtr { @GetMapping("hello") public String hello(String name) { return "hello " + name + "!"; } } ## 2)配置拦截器 ## import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.lang.Nullable; import org.springframework.stereotype.Component; import org.springframework.web.servlet.AsyncHandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 拦截器,打印日志 */ @Component public class MyInterceptor implements AsyncHandlerInterceptor { protected final Logger logger = LoggerFactory.getLogger(this.getClass()); /** * 进入前 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { String name = request.getParameter("name"); logger.info("-------------------------before-------------------------"); logger.info("打印参数name:" + name); return true; } /** * 执行完 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { logger.info("-------------------------after-------------------------"); } /** * 结束 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { logger.info("-------------------------Completed-------------------------"); } /** * This implementation is empty. */ @Override public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { logger.info("Concurrent"); } protected final void error(String msg, Object... objects) { logger.error(msg, objects); } protected final void info(String msg, Object... objects) { logger.info(msg, objects); } } ## 3)配置WebMvcConfigurer ## import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class MyWebMvcConfigurer implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/api/toLogin","/api/login","/js/**","/css/**","/images/**"); } } ## 4)打印结果 ## 2021-01-25 23:14:17.459 INFO 10948 --- [nio-8080-exec-5] com.web.web.demo.config.MyInterceptor : -------------------------before------------------------- 2021-01-25 23:14:17.459 INFO 10948 --- [nio-8080-exec-5] com.web.web.demo.config.MyInterceptor : 打印参数name:joe 2021-01-25 23:14:17.461 INFO 10948 --- [nio-8080-exec-5] com.web.web.demo.config.MyInterceptor : -------------------------after------------------------- 2021-01-25 23:14:17.461 INFO 10948 --- [nio-8080-exec-5] com.web.web.demo.config.MyInterceptor : -------------------------Completed-------------------------
还没有评论,来说两句吧...