Spring Boot 2.0踩坑笔记

一、扩展Spring MVC

在springboot2.0之前 我们如果需要扩展SpringMvc,一般是继承 WebMvcConfigurerAdapter 来实现url的定向,

@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        //浏览器发送 /test 请求来到 success
        registry.addViewController("/test").setViewName("success");
    }
}
在springboot 2.0以后 WebMvcConfigurerAdapter 这个方法已经过时,那怎么来修改呢?

有两种方式:

第一种 :继承WebMvcConfigurationSupport这个类,重写父类的方法即可。但是这种方式是有问题的,这种方式会屏蔽Spring Boot的@EnableAutoConfiguration中的设置。

原因:WebMvcAutoConfiguration会先判断如果不存在WebMvcConfigurationSupport类才会生效。


@Configuration
@ConditionalOnWebApplication(
    type = Type.SERVLET
)
@ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class})
@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
@AutoConfigureOrder(-2147483638)
@AutoConfigureAfter({DispatcherServletAutoConfiguration.class, ValidationAutoConfiguration.class})
public class WebMvcAutoConfiguration {

这时候启动项目时会发现映射根本没有成功,读取不到静态的资源也就是说application.properties中添加配置的映射配置没有启动作用,然后我们会想到重写来进行映射:

@Configuration
public class myMvcConfig extends WebMvcConfigurationSupport{
 
    @Bean
    public WebMvcConfigurationSupport webMvcConfigurationSupport(){
        WebMvcConfigurationSupport support = new WebMvcConfigurationSupport(){
            @Override
            protected void addViewControllers(ViewControllerRegistry registry) {
                registry.addViewController("/").setViewName("login");
                registry.addViewController("/main.html").setViewName("dashboard");
                // registry.addViewController("/login.html").setViewName("login");
            }
 
            @Override
            public void addResourceHandlers(ResourceHandlerRegistry registry) {
                //registry.addResourceHandler("/resources/static/**").addResourceLocations("classpath:/static/");
                registry.addResourceHandler("/static/**").addResourceLocations("classpath:/resources/static/");
                super.addResourceHandlers(registry);
            }
        };
        return support;
    }

第二种:实现WebMvcConfigurer这个接口,(推荐使用这种)

@Configuration
public class MyWebMvcConfigurationAdapter implements WebMvcConfigurer{
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/test").setViewName("success");
    }
}

 

转载于:https://my.oschina.net/u/737121/blog/1921942

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值