springboot 無法配置多個靜態路徑
默認static路徑是可以訪問的,
對接天貓精靈需要額外的放開一個目錄aligenie,供天貓精靈端訪問,且路徑名稱無法更改。
這就導致了一個問題,默認識別的靜態路徑META-INF/resources / resources / static / public 都是spring boot 認為靜態資源應該放置的位置,會自動去尋找靜態資源。無法識別aligenie路徑。
需要在啟動類里加一段代碼如下:
1
2
3
4
|
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler( "/aligenie/**" ).addResourceLocations( "classpath:/aligenie/" ); } |
springboot靜態路徑配置遇到的坑
用springboot做一個項目,遇到一個情況是前端要展示服務器保存的圖片,這時候涉及到一個靜態路徑配置的問題,踩到了一個坑
因為springboot是自帶tomcat的,所以我們沒必要去改變自己tomcat的設置,只需要在properties.yml里進行配置或者繼承WebMvcConfigurationSupport類去寫一個配置類,其中yml配置的方法可以自行去找,網上一搜一大把,這里說下用配置類遇到的一個坑
按照網上一些博客的說法
1
2
3
4
5
6
7
8
9
|
@Configuration public class UploadConfiguration extends WebMvcConfigurationSupport { @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler( "/upload/**" ) //這個將應用到url中 .addResourceLocations( "file:///" );//這里填的是圖片的絕對父路徑 super .addResourceHandlers(registry); } } |
這樣跑了一下之后發現,雖然圖片是可以直接通過url訪問到了,但是html、js等其他靜態資源(和圖片不在同一個文件夾下)訪問不到了...
解決方法
雖然現在大家都會前后端分離開發,不會遇到這樣的問題,但是既然遇到了,還是得想辦法解決一下的,初步猜測的話,是因為配置類覆蓋了原來的默認靜態路徑,導致了新配置起效但是原來的訪問不了的情況,所以我們再手動把原來的路徑添加進來
1
2
3
4
5
6
7
8
9
10
11
12
|
@Configuration public class UploadConfiguration extends WebMvcConfigurationSupport { @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler( "/**" ) .addResourceLocations( "file:///" );//這里是所有靜態資源的父文件夾絕對路徑,一般是webapps文件夾的路徑 super .addResourceHandlers(registry); registry.addResourceHandler( "/upload/**" ) //這個將應用到url中 .addResourceLocations( "file:///" );//這里填的是圖片的絕對父路徑 super .addResourceHandlers(registry); } } |
這樣問題就解決了!
最后再提一下,file:/// 這里的斜杠為什么是三條,網上有教程說是要進行轉義,但是經過實測一條和三條都是沒區別的,有點玄學~
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/qq_31949853/article/details/85148841