springboot static靜態資源訪問不到及NoHandlerFoundException沒有出發的感悟

  • 最近在寫一個spring boot restful api的項目,須要把404封裝成統一結果信息,因此查了一下只需在配置文件中加入
mvc:
    throw-exception-if-no-handler-found: true
  resources:
    add-mappings: false
複製代碼

就能夠讓404拋出NoHandlerFoundException了,能拋出就能捕獲,試了下的確很管用spring

  • 可是好景不長,後來講後臺管理系統須要寫在服務器端,因此使用了freemarker模板引擎,可是卻悲催的發現static下的靜態資源目錄訪問不了了,而後又是網上一同翻,雖然不知道爲啥好端端的就訪問不了了,可是隻需在MvcConfig中加入
@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/static/");
    }
複製代碼

就能夠了,試了一下的確也沒問題,皆大歡喜api

  • 後來測試的時候又出現問題了,發現404又出現了,沒有按照以前封裝的返回格式,真的是很鬱悶,明明什麼也沒改呀,來回折騰半天后發現,原來是上門兩端代碼不兼容,設置了throw-exception-if-no-handler-found: true,就會覆蓋默認的static訪問路徑,自定義加了這個路徑又會覆蓋這個throw-exception-if-no-handler-found: true; 最後問題仍是解決了,解決辦法就是設置自定義static路徑的時候,不要使用/**,而是本身給加一個前綴
@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/");
    }
複製代碼

像這樣就沒有問題了,估計是/**攔截全部的請求先走靜態資源,找不到就認爲是一個靜態資源找不到,當時是404啦,因此就把靜態資源路徑自定義一個目錄下面就沒問題了bash

  • 感悟 一個項目若是是restful api就應該專一隻提供接口,若是是spring mvc,就應該專一作spring mvc,不要混到一塊兒作,這樣既不符合原則,並且還會引起衝突
相關文章
相關標籤/搜索