第三章,springboot中的WebMvcConfigurer接口

本章目标

了解WebMvcConfigurer作用
IDEA实现接口方法
利用WebMvcConfigurer配置项目的CORS等

WebMvcConfigurer的作用

WebMvcConfigurer: 直接点就是web的配置都可以在这类里面干
可以查看spring的文档, 其定义了很多供重构的方法


image.png

利用WebMvcConfigurer配置项目的CORS等

在上节的项目中新建一个MyConfiguration实现WebMvcConfigurer

public class MyConfiguration implements WebMvcConfigurer {}

IDEA实现接口方法

快捷键 CTRL+O , 会提示所有需要实现的接口


image.png

springboot内容协商配置(configureContentNegotiation)

内容协商:在 HTTP 协议中,内容协商是这样一种机制,通过为同一 URI 指向的资源提供不同的展现形式,可以使用户代理选择与用户需求相适应的最佳匹配(例如,文档使用的自然语言,图片的格式,或者内容编码形式)。

image.png

@Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        /* 是否通过请求Url的扩展名来决定media type */
        configurer.favorPathExtension(true)
                /* 不检查Accept请求头 */
                .ignoreAcceptHeader(true)
                .parameterName("mediaType")
                /* 设置默认的media yype */
                .defaultContentType(MediaType.TEXT_HTML)
                /* 请求以.html结尾的会被当成MediaType.TEXT_HTML*/
                .mediaType("html", MediaType.TEXT_HTML)
                /* 请求以.json结尾的会被当成MediaType.APPLICATION_JSON*/
                .mediaType("json", MediaType.APPLICATION_JSON);
    }

上面代码说白了就是告诉系统什么类型用什么来标识

spring boot配置视图解析(configureViewResolvers)

@Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/jsp/", ".jsp");
        registry.enableContentNegotiation(new MappingJackson2JsonView());
    }

看上去是不是感觉很熟悉 ,没错,在application.properties里面的spring.mvc.view.prefix以及spring.mvc.view.suffix, 如果配置了视图解析可以不需要在application.properties中配置prefix,suffix这两项了 ,测试结果和之前是一样的 http://127.0.0.1:8083/index

image.png

CORS配置

https://www.jianshu.com/p/0b928da37fc8

资源处理(addResourceHandlers)

当你请求http://localhost:8083/resource/1.png时,会把/WEB-INF/static/1.png返回。注意:这里的静态资源是放置在WEB-INF目录下的。

然后完整的代码如下:

@Configuration
public class MyConfiguration implements WebMvcConfigurer {
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        /* 是否通过请求Url的扩展名来决定media type */
        configurer.favorPathExtension(true)
                /* 不检查Accept请求头 */
                .ignoreAcceptHeader(true)
                .parameterName("mediaType")
                /* 设置默认的media yype */
                .defaultContentType(MediaType.TEXT_HTML)
                /* 请求以.html结尾的会被当成MediaType.TEXT_HTML*/
                .mediaType("html", MediaType.TEXT_HTML)
                /* 请求以.json结尾的会被当成MediaType.APPLICATION_JSON*/
                .mediaType("json", MediaType.APPLICATION_JSON);
    }

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/jsp/", ".jsp");
        registry.enableContentNegotiation(new MappingJackson2JsonView());
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resource/**").addResourceLocations("/WEB-INF/static/");
    }
}

好了, 大致都是这样, 有需要的话直接在文档中看看就好, 只要记住这货就是干这活的就可以了, 下一章介绍注解,

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,534评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,084评论 6 342
  • spring官方文档:http://docs.spring.io/spring/docs/current/spri...
    牛马风情阅读 5,708评论 0 3
  • 韶华易逝,再难许卿 倘若我没有来到部队,我会拥有什么样的生活?我曾无数次诘问我自己,与其说...
    此雨非鱼阅读 3,325评论 0 1
  • 概述 一般来说,我们如果要在工程里面添加其他工程的代码,都是copy一份过来。手动copy比较麻烦,且容易出错,如...
    微微笑的蜗牛阅读 16,260评论 9 57