SpringBoot-MVC自动配置类

前言

今天写登录页面的时候,遇到了一个问题,bootstrape的静态资源引用失败,
提示No mapping for GET /bootstrap/css/bootstrap.min.css,
百度后得知需要在MVC自动配置类映射静态资源路径.

参考:https://mp.weixin.qq.com/s?__biz=Mzg2NTAzMTExNg%3D%3D&chksm=ce610708f9168e1ee95b9f6135574cbea2d2b90ac3d0f7b6766d5260be0d711bbb73e678c6b5&idx=1&mid=2247483819&scene=21&sn=b9009aaa2a9af9d681a131b3a49d8848#wechat_redirect

1. 什么是MVC自动配置类?

回到前言:如何解决引入bootstrape资源失败No mapping for GET /bootstrap/css/bootstrap.min.css
答:建立WebMvcConfigurer类,重写静态资源目录

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {

    private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
            "classpath:/META-INF/resources/", "classpath:/resources/",
            "classpath:/static/", "classpath:/public/" };

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**")
                .addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS);

    }
}

成功解决!

再说什么是什么是MVC自动配置类?
相比SSM框架越来越臃肿的配置,SpringBoot有一套约定俗成的自动配置,
如静态资源放在resources文件夹及其目录中的static、public、templates文件夹,SpringBoot通过映射目录,直接可以通过根目录访问,
省去了大量的配置,方便快捷。
我们如果需要修改相关的配置,只需要在WebMvcConfigurer中重写相关的方法即可。

2. MVC自动配置类都做了什么?

2.1 内容协商视图解析器 ContentNegotiatingViewResolver

自动配置了ViewResolver,即根据方法的返回值取得视图对象(View),然后由视图对象决定如何渲染(转发,重定向)。

2.2 转换器和格式化器FormattingConversionService

2.3 修改SpringBoot的默认配置

SpringBoot在自动配置很多组件的时候,先看容器中有没有用户自己配置的(如果用户自己配置@bean),如果有就用用户配置的,如果没有就用自动配置的;
如果有些组件可以存在多个,比如我们的视图解析器,就将用户配置的和自己默认的组合起来!

我们要做的就是编写一个@Configuration注解类,并且类型要为WebMvcConfigurer,还不能标注@EnableWebMvc注解;我们去自己写一个;我们新建一个包叫config,写一个类MyMvcConfig;

//因为类型要求为WebMvcConfigurer,所以我们实现其接口
//可以使用自定义类扩展MVC的功能
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        // 浏览器发送/test , 就会跳转到test页面;
        registry.addViewController("/test").setViewName("test");
    }
}

2.4 全面接管SpringMVC

不推荐使用全面接管SpringMVC

posted @ 2023-01-11 11:52  对CSDN使用炎拳吧  阅读(57)  评论(0编辑  收藏  举报