zoukankan      html  css  js  c++  java
  • SpringBoot---关于 WebMvcConfigurerAdapter 过时问题及解决方法

    SpringBoot---关于 WebMvcConfigurerAdapter 过时问题及解决方法

    环境:

    IDEA :2020.1

    Maven:3.5.6

    SpringBoot: 2.3.2

    在SpringBoot 1.0 + 中,WebMvcConfigurerAdapter是Spring内部的一种配置方式,采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制。实现视图控制,静态资源处理,添加拦截器等一系列操作。

    常用方法有:

    //添加拦截器
    public void addInterceptors(InterceptorRegistry registry) {
        }
    //添加静态资源处理
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
        }
    //添加视图控制
        public void addViewControllers(ViewControllerRegistry registry) {
        }
    

    但是, WebMvcConfigurerAdapter 在 SpringBoot 2.0 + (Spring 5.0 +)中显示已经过时,虽然还可以使用,官方不推荐使用。

    image-20200813162739341

    它的替代方案有两种:

    1. 继承WebMvcConfigurationSupport 类(继承这个类后,SpringMVC自动配置失效,相当于全面接管SpringMVC )
    2. 实现 WebMvcConfigurer 接口

    由于使用第一种会违背我们使用 SpringBoot 的初衷,增大工作量。

    第二种方法其实和原来 WebMvcConfigurerAdapter 使用方法类似 ,只是改了接口名,下面介绍第二种方法:

    @Configuration
    public class mvcConfig /*extends WebMvcConfigurerAdapter*/ implements WebMvcConfigurer {   //WebMvcConfigurerAdapter已过时
        //已过时
        /*//拓展SpringMVC
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            //super.addViewControllers(registry);
            registry.addViewController("/newhello").setViewName("hello");
        }
    
        //所有的WebMvcConfigurerAdapter组件都会一起起作用
        @Bean //将组件注册在容器
        public WebMvcConfigurerAdapter webMvcConfigurerAdapter(){
            WebMvcConfigurerAdapter adapter = new WebMvcConfigurerAdapter() {
                @Override
                public void addViewControllers(ViewControllerRegistry registry) {
                    registry.addViewController("/").setViewName("login");
                    registry.addViewController("/login.html").setViewName("login");
                }
            };
            return adapter;
        }*/
    
        @Bean //将组件注册在容器
        public WebMvcConfigurer webMvcConfigurer(){
            WebMvcConfigurer webMvcConfigurer = new WebMvcConfigurer() {
                @Override
                public void addViewControllers(ViewControllerRegistry registry) {
                    registry.addViewController("/").setViewName("login");
                    registry.addViewController("/index.html").setViewName("login");
                    registry.addViewController("/main.html").setViewName("dashboard");
                }
    
                @Override
                public void addInterceptors(InterceptorRegistry registry) {
                    InterceptorRegistration interceptor = registry.addInterceptor(new LoginHandlerinterceptor());
                    interceptor.addPathPatterns("/**");
                    interceptor.excludePathPatterns("/","/index.html","/user/login");
                }
    
    //            @Override    并未拦截默认文件的静态资源,不需要进行处理
    //            public void addResourceHandlers(ResourceHandlerRegistry registry) {
    //                registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    //            }
            };
            return webMvcConfigurer;
        }
    }
    
  • 相关阅读:
    spring----RESTful API
    spring----模块之间的通讯问题
    PHP错误与异常处理
    微信支付:curl出错,错误码:60
    jquery判断checkbox是否选中
    微信网页授权的问题
    TP5更新数据成功,但判断结果不符
    190719有个织梦专题标题长度限制问题
    判断手机浏览器还是微信浏览器(PHP)
    TP5关联模型出现疑问,待解决
  • 原文地址:https://www.cnblogs.com/l1ng14/p/13497255.html
Copyright © 2011-2022 走看看