springboot

第三章,springboot中的WebMvcConfigurer

2018-04-18  本文已影响0人  毛仑上保罗先生

本章目标

了解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/");
    }
}

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

上一篇下一篇

猜你喜欢

热点阅读