1. 程式人生 > >springboot static靜態資源訪問不到及NoHandlerFoundException沒有出發的感悟

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

  • 最近在寫一個spring boot restful api的專案,需要把404封裝成統一結果資訊,所以查了一下只需在配置檔案中加入
mvc:
    throw-exception-if-no-handler-found: true
  resources:
    add-mappings: false

就可以讓404丟擲NoHandlerFoundException了,能丟擲就能捕獲,試了下的確很管用

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

就可以了,試了一下的確也沒問題,皆大歡喜

  • 後來測試的時候又出現問題了,發現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啦,所以就把靜態資源路徑自定義一個目錄下面就沒問題了

  • 感悟
    一個專案如果是restful api就應該專注只提供介面,如果是spring mvc,就應該專注做spring mvc,不要混到一起做,這樣既不符合原則,而且還會引發衝突

相關推薦

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

最近在寫一個spring boot restful api的專案,需要把404封裝成統一結果資訊,所以查了一下只需在配置檔案中加入mvc: throw-exception-if-no-handler-found: true resources: add-mappings: false 就可

IntelliJ IDEA+SpringBoot靜態資源訪問路徑陷阱:靜態資源訪問404

今天在使用SpringBoot時遇到靜態資源無法訪問的問題,百思不得其解,最終解決,記錄下來。 問題描述 html頁面中訪問static資料夾下的index.css檔案失敗,瀏覽器除錯模式下發現404。 專案目錄結構如下: HTML程式碼截圖 路徑正常

springboot jsp 靜態資源訪問

專案要建立成war在使用springboot框架之前,前臺資源一直存放在WEB-INF資料夾裡,如圖:那使用springboot框架還想用之前的方式進行訪問怎麼做呢?這個問題困擾我一天,在其他好友的幫助下,終於解決了這個問題。我表示非常感謝。廢話不多說了,直接上解決方案。靜態

springboot配置靜態資源訪問路徑

framework 訪問 pre pub 文件訪問 jar包 服務 ride 發布 其實在springboot中靜態資源的映射文件是在resources目錄下的static文件夾,springboot推薦我們將靜態資源放在static文件夾下,因為默認配置就是classpa

SpringBoot靜態資源訪問

spring font boot 靜態 size oot pan 時間 如果 SpringBoot 1.X 版本和 SpringBoot 2.X 版本在靜態資源訪問上有一些區別,如果直接從 1.X 升級到 2.X 肯定是有問題的。這篇文章就來講講這方面問題,也是項目中的坑。

springboot靜態資源訪問

springboot預設提供靜態資源目錄要求在classpath下,可建立/static,/public,/resources,/META-INF/resources。將css,js,圖片等靜態資源直接放在該目錄下,但是在訪問時路徑不需要寫上述幾種檔名,因為它是springboot已經預設提供的路徑

springboot中存放靜態資源訪問方法

轉自:https://blog.csdn.net/xlecho/article/details/85015508   springboot中建立靜態資源,需要訪問最關鍵的只需要建立一個配置類即可 建立springboot工程 建立的時候加入web依賴 工程目錄結構

SpringBoot靜態資源訪問和配置(轉載)

super 工具 webapp adapt ada 目錄 res 優先級 ces 默認靜態資源訪問Spring Boot的默認靜態資源的路徑為: spring.resources.static-locations=classpath:/META-INF/resources/

springboot加了攔截器後,靜態資源訪問不到的問題

首先在appication.properties中配置靜態資源的對映路徑:不配置的話預設靜態資源預設是對映到下面的路徑在工程中加了一個攔截器(還需要註冊!!),但是springboot和springmvc不同,它不是在配置檔案中進行配置,而是需要自定義配置類(需要實現一些規範

SpringBoot靜態資源訪問+攔截器+Thymeleaf模板引擎實現簡單登陸

開始 -s 17. 登陸 maven安裝 有一點 1.8 static source 在此記錄一下這十幾天的學習情況,卡在模板引擎這裏已經是四天了。 對Springboot的配置有一個比較深刻的認識,在此和大家分享一下初學者入門Spring Boot的註意事項,如果是初學S

springmvc、springboot靜態資源訪問配置

ati 無法 ssp simple test javascrip spa handle rop 如何訪問項目中的靜態資源? 一.springmvc springmvc中訪問靜態資源,如果DispatcherServlet攔截的為"",那麽靜態資源的訪問也會交給Dispa

springboot學習入門簡易版四---springboot2.0靜態資源訪問及整合freemarker視圖層

nbsp 規則 pri stat path 整合 位置 啟動程序 -- 2.4.4 SpringBoot靜態資源訪問(9) Springboot默認提供靜態資源目錄位置需放在classpath下,目錄名需要符合如下規則 /static /public /resour

SpringBoot靜態資源的映射規則

cti meta classpath pen 圖片 分享 引入 index -i 一、所有 /webjars/** ,都去 classpath:/META-INF/resources/webjars/ 找資源 webjars:以jar包的方式引入靜態資源,如下:引入 jqu

spring-springmvc搭建(三)springMVC添加對靜態資源訪問的支持及對Fastjson的支持

gmv port ack register repos servle 配置 als img 1.添加對靜態資源.js/.img/.css的訪問 方式有3種: 1,更改springmvc 的DispatherServlet的urlpattern的路徑改為“/*

Spring Security 靜態資源訪問

adapter static rip 登陸界面 用戶名 ava 擁有 ger password 在搞 Spring Security 的時候遇到了一個小坑,就是靜態資源加載的問題。 當我們繼承了 WebSecurityConfigurerAdapter的時候,會去重寫幾個方

6.Spring MVC靜態資源訪問

cati 解決 fault 是我 直接 mage 所有 param 進行 在SpringMVC中常用的就是Controller與View。但是我們常常會需要訪問靜態資源,如html,js,css,image等。 默認的訪問的URL都會被DispatcherServlet所攔

Springboot下載靜態資源-excel模板

最近專案中要用到上傳員工資訊,在填寫員工資訊,那麼首先要定義模板且放在網站上,就要用到下載靜態資源,一般情況下實現都是如下:  1、獲取模板的路徑;(這裡的路徑經常會搞錯) 2、建立該路徑的輸入流; 3、設定response的標頭檔案格式; 4、將輸入流中的內容寫進resp

java web 靜態資源訪問配置

方案一:Tomcat的defaultServlet來處理靜態檔案 <servlet-mapping>          <servlet-name>defau

spring boot靜態資源訪問配置(訪問專案資料夾外的檔案)

很多類似的博文,但是實際配置後發現是有問題的。下面是完整的yml靜態資源訪問配置,在spring:下新增 mvc: static-path-pattern: /** #這個配置是預設配置 http:

Springboot靜態資源和攔截器處理

背景: 在專案中我使用了自定義的Filter 這時候過濾了很多路徑,當然對靜態資源我是直接放過去的,但是,還是出現了靜態資源沒辦法訪問到springboot預設的資料夾中得檔案   說下預設對映的資料夾有: classpath:/META-INF/resourc