Springboot項(xiàng)目編譯后未能加載靜態(tài)資源文件的問(wèn)題
Springboot項(xiàng)目編譯后未能加載靜態(tài)資源文件
起因
因甲方加了一個(gè)緊急的需求: 需要搞一個(gè)文件上傳和下載功能.
我心中想:這不簡(jiǎn)單,搞個(gè)資源服務(wù)器,將上傳文件放上去,然后訪問(wèn)資源鏈接就行了.
但接下來(lái)甲方爸爸說(shuō) 不需要這莫麻煩,直接將文件放服務(wù)器里,用的時(shí)候下載到資源文件夾下就行.
我心里想: 我擦嘞 還能這樣!! 然后小心心翼翼的說(shuō) 有資源服務(wù)器會(huì)更好的進(jìn)行統(tǒng)一管理,
說(shuō)了些缺點(diǎn)..但人不想.哎! 那就擼代碼吧 結(jié)果就發(fā)生一個(gè)莫名奇妙的事情.
原因
idea中項(xiàng)目啟動(dòng),在將文件下載到資源路徑下時(shí)報(bào)問(wèn)題如下:
class path resource [***] cannot be resolved to URL because it does not exist
資源文件找不到錯(cuò)誤,我擦.
然后樓主就翻了下編譯后的文件夾
看到問(wèn)題沒(méi),這里竟然少了一個(gè)資源文件夾.可樓主都配置了啊
配置如下:
maven配置:
資源文件文件夾配置:
就很奇,為啥編譯后target->class下沒(méi)有static
然后樓主就開(kāi)始了長(zhǎng)達(dá)20分鐘的查找.百度的結(jié)果很亂,但都不能解決問(wèn)題
最終樓主決定下去抽個(gè)煙?。?!
思考
下去抽煙時(shí) 樓主就思考.配置路徑正確,文件路徑也沒(méi)問(wèn)題,為啥編譯后沒(méi)生成!
接下來(lái)樓主突然想到了種問(wèn)題,會(huì)不會(huì)是資源文件下沒(méi)有資源 導(dǎo)致maven在進(jìn)行打包時(shí)會(huì)默認(rèn)過(guò)濾掉沒(méi)有資源的文件夾!
驗(yàn)證
樓主在static文件夾下 扔了一個(gè)文件 編譯了下 然后就好使了.
就很神奇.
復(fù)盤(pán)
maven在編譯的時(shí)候 會(huì)過(guò)濾掉空文件夾,咱們?cè)谑褂玫臅r(shí)候 增加默認(rèn)文件就好
Springboot靜態(tài)資源加載不到,并且配置了也不生效
問(wèn)題描述,以及歷程
寫(xiě)項(xiàng)目的時(shí)候?qū)肓艘粋€(gè)前端項(xiàng)目,加載的時(shí)候發(fā)現(xiàn),竟然404,我估計(jì)就是沒(méi)掃描到靜態(tài)資源,我就跟之前一樣寫(xiě)了一個(gè)配置類:
@Configuration public class WebMvcConfig extends WebMvcConfigurationSupport { ? ? @Override ? ? protected void addResourceHandlers(ResourceHandlerRegistry registry) { ? ? ? ? registry.addResourceHandler("/**") ? ? ? ? ? ? ? ? .addResourceLocations("classpath:/static/") ? ? ? ? ? ? ? ? .addResourceLocations("classpath:/templates/"); ? ? ? ? super.addResourceHandlers(registry); ? ? } }
然后發(fā)現(xiàn)也不生效,
我就去搜,發(fā)現(xiàn)了各種配置的方法,繼承這個(gè)類的,或者實(shí)現(xiàn)那個(gè)方法的,網(wǎng)上一搜一大堆,都不行,然后我又試了用配置文件配置,也就是yml,因?yàn)橛玫膖hymeleaf引擎模板的,所以,也配置了些thymeleaf的配置,能好點(diǎn),起碼能訪問(wèn)到首頁(yè)的html了,但是依然靜態(tài)資源加載不到,
還有說(shuō)那個(gè)pom文件有那個(gè)過(guò)濾的,把那個(gè)刪了就好,我查過(guò)那個(gè)問(wèn)題了,我沒(méi)有那個(gè)過(guò)濾的。
解決問(wèn)題
經(jīng)過(guò)一下午的排查,與搜索,終于找到了解決方法:我用的springBoot版本的問(wèn)題:2.6.x就會(huì)有問(wèn)題,需要引入配置,才能生效:
Springboot-2.6.x所使用到的spring mvc-5.3.x 默認(rèn)的路徑匹配策略改變了:
Spring MVC 處理程序映射匹配請(qǐng)求路徑的默認(rèn)策略已從 AntPathMatcher 更改為PathPatternParser。所以我們得給他設(shè)置回去
spring: ? ? ? mvc: ? ? ? ? pathmatch: ? ? ? ? ? matching-strategy: ant_path_matcher
之后再使用前面的幾種方法就ok了,哪個(gè)生效用哪個(gè)。
或者,直接降boot的版本。
總結(jié)
如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
相關(guān)文章
Component和Configuration注解區(qū)別實(shí)例詳解
這篇文章主要為大家介紹了Component和Configuration注解區(qū)別實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11Java switch()括號(hào)內(nèi)參數(shù)的類型要求詳解
這篇文章主要介紹了Java switch()括號(hào)內(nèi)參數(shù)的類型要求,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10詳解Java中ThreadLocal類型及簡(jiǎn)單用法
ThreadLocal實(shí)例通常是希望將狀態(tài)與線程關(guān)聯(lián)起來(lái)的類中的私有靜態(tài)字段,下面通過(guò)例子給大家詳細(xì)介紹Java中ThreadLocal類型及簡(jiǎn)單用法,感興趣的朋友跟隨小編一起看看吧2021-10-10java實(shí)現(xiàn)一次性壓縮多個(gè)文件到zip中的方法示例
這篇文章主要介紹了java實(shí)現(xiàn)一次性壓縮多個(gè)文件到zip中的方法,涉及java針對(duì)文件批量壓縮相關(guān)的文件判斷、遍歷、壓縮等操作技巧,需要的朋友可以參考下2019-09-09spring boot + mybatis實(shí)現(xiàn)動(dòng)態(tài)切換數(shù)據(jù)源實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于spring boot + mybatis實(shí)現(xiàn)動(dòng)態(tài)切換數(shù)據(jù)源的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10解決微服務(wù)中關(guān)于用戶token處理到的坑
這篇文章主要介紹了解決微服務(wù)中關(guān)于用戶token處理到的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08jpa使用manyToOne(opntional=true)踩過(guò)的坑及解決
這篇文章主要介紹了jpa使用manyToOne(opntional=true)踩過(guò)的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10