首页 > Web开发 > 详细

WebMvcConfigurationSupport 避坑指南

时间:2019-11-30 15:46:03      阅读:154      评论:0      收藏:0      [点我收藏+]

 

  通过返回WebMvcConfigurationSupport 的方式, 默认会覆盖 Spring boot的自动配置, 导致配置失效静态资源无法访问:但是在WebMvcConfigurationadpter(已久过时)这是允许的

@Bean
    public WebMvcConfigurationSupport initIndexConfig() {

       return new WebMvcConfigurationSupport() {
           @Override
           protected void addViewControllers(ViewControllerRegistry registry) {
               registry.addViewController("/").setViewName("login");
               registry.addViewController("/index.html").setViewName("login");
           }

           @Override
           protected void addResourceHandlers(ResourceHandlerRegistry registry) {
               registry.addResourceHandler("/**")
                       .addResourceLocations("classpath:/resources")
                       .addResourceLocations("classpath:/static")
                       .addResourceLocations("classpath:/templates")
                       .addResourceLocations("classpath:/public");
           }
           @Override
           protected void addInterceptors(InterceptorRegistry registry) {
               super.addInterceptors(registry);
           }
       };
   }

 WebMvcConfigurerAdapter 是一个适配器类,

/** @deprecated */
@Deprecated
public abstract class WebMvcConfigurerAdapter implements WebMvcConfigurer {
    public WebMvcConfigurerAdapter() {
    }

 而WebMvcConfigurationSupport  提供默认实现 不是一个空方法

public class WebMvcConfigurationSupport implements ApplicationContextAware, ServletContextAware {

    private static final boolean romePresent;

    private static final boolean jaxb2Present;

    private static final boolean jackson2Present;

    private static final boolean jackson2XmlPresent;

    private static final boolean jackson2SmilePresent;

    private static final boolean jackson2CborPresent;

 

 所以: 采用返回 @Bean的方式, 会覆盖实现的很多默认配置导致不能使用,

正确的使用方法是:

@Configuration
public class AppConfig extends WebMvcConfigurationSupport{

           @Override
           protected void addViewControllers(ViewControllerRegistry registry) {
               registry.addViewController("/").setViewName("login");
               registry.addViewController("/index.html").setViewName("login");
           }

           @Override
           protected void addResourceHandlers(ResourceHandlerRegistry registry) {
               registry.addResourceHandler("/**")
                       .addResourceLocations("classpath:/resources")
                       .addResourceLocations("classpath:/static")
                       .addResourceLocations("classpath:/templates")
                       .addResourceLocations("classpath:/public");
           }
           @Override
           protected void addInterceptors(InterceptorRegistry registry) {
               super.addInterceptors(registry);
           }

你还可以选择 直接实现 

WebMvcConfigurer

 

 

 

 

 

 

 

WebMvcConfigurationSupport 避坑指南

原文:https://www.cnblogs.com/dgwblog/p/11962497.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!