雖然如今都流行先後端分離部署,但有時候仍是須要把前端文件跟後端文件一塊兒打包發佈,這就涉及到了springboot的靜態資源訪問的問題。不單只是靜態資源打包,好比使用本地某個目錄做爲文件存儲,也可經過WebMvcConfigurer接口來配置。前端
在與前端交互的過程當中,也會碰到一個跨域的問題。咱們也可經過WebMvcConfigurer接口來解決跨域的問題。spring
Spring Boot 默認爲咱們提供了靜態資源處理,我建議你們直接使用Spring Boot的默認配置便可。默認提供的靜態資源映射以下:後端
這些目錄的靜態資源時能夠直接訪問到的。上面這幾個都是靜態資源的映射路徑,優先級順序爲:META-INF/resources > resources > static > public跨域
使用第一講中spring initilize工具建立的springboot工程,默認也給咱們建立了classpath:/static這個目錄瀏覽器
咱們往這個目錄放一個圖片,head.jpgspringboot
經過瀏覽器訪問http://localhost:8080/head.jpgapp
以上這些都是springboot默認給咱們提供的,那麼咱們有沒有能力本身自定義一個靜態資源映射呢?徹底能夠。使用WebMvcConfigurer這個類便可實現自定義靜態資源配置。前後端分離
咱們新建一個WebConfig類實現WebMvcConfigurer接口 ,以下:ide
@Configuration public class WebConfig implements WebMvcConfigurer { }
如今咱們什麼都不配置,而後重啓應用,訪問http://localhost:8080/head.jpg。卻發現程序報404了:工具
這是由於咱們配置了WebMvcConfigurer,這就替換了springboot原先的默認配置。這裏咱們想要自定義一個靜態資源配置,好比,咱們/file/**這樣的請求,定向到個人D盤根目錄下。咱們重寫WebMvcConfigurer接口的addResourceHandlers方法。以下:
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/file/**") .addResourceLocations("file:D:\"); }
而後把head.jpg圖片放到D盤下:
這裏須要注意的是,配置外部的資源要使用file聲明,配置jar包內部的使用classpath聲明。
能夠經過重寫WebMvcConfigurer的addCorsMappings方法,能夠配置跨域的問題。以下:
/** * 跨域支持 */ @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowCredentials(true) .allowedMethods("GET", "POST", "DELETE", "PUT", "PATCH") .maxAge(3600 * 24); }
WebMvcConfigurer接口不單只是可以配置靜態資源訪問和解決跨域問題,它還能夠配置不少Web請求相關的東西,好比攔截器,數據轉化(MessageConverters)等,礙於篇幅,這裏就先不討論了。能夠配置的東西,能夠經過接口的方法查看,以下:
SpringBoot 默認幫咱們作了不少事情,這大大方便了咱們的開發。 可是,有時候咱們想要本身定義一些Handler,Interceptor,ViewResolver,MessageConverter,在Spring Boot 2.0以前版本都是靠重寫WebMvcConfigurerAdapter的方法來添加自定義攔截器,消息轉換器等。SpringBoot 2.0 後,該類被標記爲@Deprecated。如今,咱們只能靠實現WebMvcConfigurer接口來實現了。