本章目標(biāo)
了解WebMvcConfigurer作用
IDEA實(shí)現(xiàn)接口方法
利用WebMvcConfigurer配置項(xiàng)目的CORS等
WebMvcConfigurer的作用
WebMvcConfigurer: 直接點(diǎn)就是web的配置都可以在這類里面干
可以查看spring的文檔, 其定義了很多供重構(gòu)的方法

利用WebMvcConfigurer配置項(xiàng)目的CORS等
在上節(jié)的項(xiàng)目中新建一個(gè)MyConfiguration實(shí)現(xiàn)WebMvcConfigurer
public class MyConfiguration implements WebMvcConfigurer {}
IDEA實(shí)現(xiàn)接口方法
快捷鍵 CTRL+O , 會(huì)提示所有需要實(shí)現(xiàn)的接口

springboot內(nèi)容協(xié)商配置(configureContentNegotiation)
內(nèi)容協(xié)商:在 HTTP 協(xié)議中,內(nèi)容協(xié)商是這樣一種機(jī)制,通過(guò)為同一 URI 指向的資源提供不同的展現(xiàn)形式,可以使用戶代理選擇與用戶需求相適應(yīng)的最佳匹配(例如,文檔使用的自然語(yǔ)言,圖片的格式,或者內(nèi)容編碼形式)。

@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
/* 是否通過(guò)請(qǐng)求Url的擴(kuò)展名來(lái)決定media type */
configurer.favorPathExtension(true)
/* 不檢查Accept請(qǐng)求頭 */
.ignoreAcceptHeader(true)
.parameterName("mediaType")
/* 設(shè)置默認(rèn)的media yype */
.defaultContentType(MediaType.TEXT_HTML)
/* 請(qǐng)求以.html結(jié)尾的會(huì)被當(dāng)成MediaType.TEXT_HTML*/
.mediaType("html", MediaType.TEXT_HTML)
/* 請(qǐng)求以.json結(jié)尾的會(huì)被當(dāng)成MediaType.APPLICATION_JSON*/
.mediaType("json", MediaType.APPLICATION_JSON);
}
上面代碼說(shuō)白了就是告訴系統(tǒng)什么類型用什么來(lái)標(biāo)識(shí)
spring boot配置視圖解析(configureViewResolvers)
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/jsp/", ".jsp");
registry.enableContentNegotiation(new MappingJackson2JsonView());
}
看上去是不是感覺(jué)很熟悉 ,沒(méi)錯(cuò),在application.properties里面的spring.mvc.view.prefix以及spring.mvc.view.suffix, 如果配置了視圖解析可以不需要在application.properties中配置prefix,suffix這兩項(xiàng)了 ,測(cè)試結(jié)果和之前是一樣的 http://127.0.0.1:8083/index

CORS配置
http://www.itdecent.cn/p/0b928da37fc8
資源處理(addResourceHandlers)
當(dāng)你請(qǐng)求http://localhost:8083/resource/1.png時(shí),會(huì)把/WEB-INF/static/1.png返回。注意:這里的靜態(tài)資源是放置在WEB-INF目錄下的。
然后完整的代碼如下:
@Configuration
public class MyConfiguration implements WebMvcConfigurer {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
/* 是否通過(guò)請(qǐng)求Url的擴(kuò)展名來(lái)決定media type */
configurer.favorPathExtension(true)
/* 不檢查Accept請(qǐng)求頭 */
.ignoreAcceptHeader(true)
.parameterName("mediaType")
/* 設(shè)置默認(rèn)的media yype */
.defaultContentType(MediaType.TEXT_HTML)
/* 請(qǐng)求以.html結(jié)尾的會(huì)被當(dāng)成MediaType.TEXT_HTML*/
.mediaType("html", MediaType.TEXT_HTML)
/* 請(qǐng)求以.json結(jié)尾的會(huì)被當(dāng)成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/");
}
}
好了, 大致都是這樣, 有需要的話直接在文檔中看看就好, 只要記住這貨就是干這活的就可以了, 下一章介紹注解,