欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot應(yīng)用中靜態(tài)資源訪問與接口請(qǐng)求沖突問題解決

 更新時(shí)間:2023年06月14日 11:16:16   作者:不愛運(yùn)動(dòng)的跑者  
這篇文章主要介紹了springboot應(yīng)用中靜態(tài)資源訪問與接口請(qǐng)求沖突,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

詭異得問題總是難以避免,發(fā)生了就有必要把經(jīng)驗(yàn)留下來。在開發(fā)過程中很少見過當(dāng)靜態(tài)資源請(qǐng)求路徑與接口請(qǐng)求路徑前綴重疊得情況下發(fā)生異常,但就是遇到了:請(qǐng)求/hello/test.js /hello/testxxxx等路徑 卻能進(jìn)入到接口/hello/test對(duì)應(yīng)的方法內(nèi)。遇到這樣得問題應(yīng)該怎么辦呢?本文通過以下幾個(gè)串起來得問題分享一下經(jīng)驗(yàn)。

問題一:“springboot js文件請(qǐng)求路徑 會(huì)被controller接收到”

在 Spring Boot 中,默認(rèn)情況下,靜態(tài)資源文件(如 JavaScript 文件)的請(qǐng)求路徑不會(huì)被交由 Controller 處理。Spring Boot 的自動(dòng)配置會(huì)將靜態(tài)資源的請(qǐng)求路徑與靜態(tài)資源文件夾進(jìn)行映射,以直接返回對(duì)應(yīng)的靜態(tài)資源文件,而不經(jīng)過 Controller。

默認(rèn)情況下,Spring Boot 將靜態(tài)資源文件放置在以下目錄中:

  • classpath:/META-INF/resources/
  • classpath:/resources/
  • classpath:/static/
  • classpath:/public/

如果你將 JavaScript 文件放置在這些目錄中的任何一個(gè),并且請(qǐng)求路徑與該文件的相對(duì)路徑匹配,Spring Boot 將會(huì)直接返回該靜態(tài)資源文件,而不會(huì)將請(qǐng)求交由 Controller。

如果你遇到了 JavaScript 文件的請(qǐng)求路徑被 Controller 接收到的問題,可能是因?yàn)橐韵虑闆r之一:

  • 靜態(tài)資源文件放置位置不正確:請(qǐng)確保你的 JavaScript 文件確實(shí)放置在 Spring Boot 默認(rèn)的靜態(tài)資源文件夾中(如 static 文件夾)。如果你將靜態(tài)資源文件放置在其他位置,可能會(huì)導(dǎo)致請(qǐng)求被 Controller 接收到。
  • 配置了自定義的靜態(tài)資源處理器:如果你在 Spring Boot 中配置了自定義的靜態(tài)資源處理器,可能會(huì)導(dǎo)致請(qǐng)求被 Controller 接收到。請(qǐng)檢查你的配置,確保不會(huì)覆蓋默認(rèn)的靜態(tài)資源處理器。
  • 路徑匹配問題:請(qǐng)確保你的 JavaScript 文件的請(qǐng)求路徑與實(shí)際文件的相對(duì)路徑匹配。如果路徑不匹配,可能會(huì)導(dǎo)致請(qǐng)求被交由 Controller 處理。

請(qǐng)檢查以上可能的原因,并根據(jù)具體情況進(jìn)行調(diào)整。確保靜態(tài)資源文件的位置正確,并且請(qǐng)求路徑與實(shí)際文件的相對(duì)路徑匹配。這樣,請(qǐng)求就應(yīng)該會(huì)直接返回對(duì)應(yīng)的靜態(tài)資源文件,而不會(huì)被 Controller 接收到。

問題二:“如何在 Spring Boot 中配置了自定義的靜態(tài)資源處理器”

在 Spring Boot 中,你可以通過實(shí)現(xiàn) WebMvcConfigurer 接口并重寫 addResourceHandlers() 方法來配置自定義的靜態(tài)資源處理器。

下面是一個(gè)示例,展示如何配置自定義的靜態(tài)資源處理器:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/custom/**")
                .addResourceLocations("classpath:/custom/")
                .setCachePeriod(3600)
                .resourceChain(true)
                .addResolver(new PathResourceResolver());
    }
}

在上面的示例中,我們創(chuàng)建了一個(gè)名為 WebConfig 的配置類,并實(shí)現(xiàn)了 WebMvcConfigurer 接口。在 addResourceHandlers() 方法中,我們通過 ResourceHandlerRegistry 對(duì)象進(jìn)行配置。

  • addResourceHandler("/custom/**") 指定了靜態(tài)資源的 URL 路徑模式,這里是 /custom/**。
  • addResourceLocations("classpath:/custom/") 指定了靜態(tài)資源文件的存放位置,這里是 classpath:/custom/,即 classpath 下的 custom 目錄。
  • setCachePeriod(3600) 設(shè)置了靜態(tài)資源的緩存時(shí)間,這里是 3600 秒。
  • resourceChain(true) 啟用資源鏈。這將在開發(fā)環(huán)境中提供更好的性能,并啟用對(duì)版本化資源的支持。
  • addResolver(new PathResourceResolver()) 添加了一個(gè)路徑解析器,用于解析靜態(tài)資源路徑。

在上述配置中,我們將自定義的靜態(tài)資源放置在 classpath 下的 custom 目錄中。你可以根據(jù)自己的需求修改路徑和其他屬性。

配置完成后,你可以將靜態(tài)資源文件放置在指定的位置,并通過 /custom/** 的路徑模式來訪問這些靜態(tài)資源。

請(qǐng)確保將上述配置類正確地添加到你的 Spring Boot 項(xiàng)目中,以便生效并使用自定義的靜態(tài)資源處理器。

問題三:“springboot開發(fā)得應(yīng)用組件內(nèi)自定義了靜態(tài)資源處理器,依賴于這個(gè)組件得系統(tǒng)無法讀取static下得文件,如何處理”

如果你基于 Spring Boot 開發(fā)的組件需要增加一個(gè)靜態(tài)資源目錄,同時(shí)又希望不影響依賴于這個(gè)組件的工程自有的靜態(tài)資源配置,可以通過自定義配置類和資源處理器來實(shí)現(xiàn)。

下面是一種可行的方法:

在組件的配置類中,添加自定義的資源處理器,并指定自己的靜態(tài)資源目錄。

@Configuration
public class MyComponentConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/mycomponent/**")
                .addResourceLocations("classpath:/mycomponent-static/");
    }
}

在上述示例中,我們將 /mycomponent/** 的請(qǐng)求路徑映射到 classpath:/mycomponent-static/ 目錄下的靜態(tài)資源。

在工程自有的配置類中,繼承 WebMvcConfigurerAdapter,并添加自己的靜態(tài)資源配置。

@Configuration
public class ApplicationConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/app/**")
                .addResourceLocations("classpath:/app-static/");
    }
}

在上述示例中,我們將 /app/** 的請(qǐng)求路徑映射到 classpath:/app-static/ 目錄下的工程自有的靜態(tài)資源。

通過以上配置,組件和工程可以分別擁有自己的靜態(tài)資源目錄,并且互相不會(huì)影響。請(qǐng)求 /mycomponent/** 會(huì)訪問組件的靜態(tài)資源目錄,而請(qǐng)求 /app/** 會(huì)訪問工程自有的靜態(tài)資源目錄。

請(qǐng)根據(jù)你的實(shí)際需求修改路徑和處理邏輯,并將以上配置類添加到對(duì)應(yīng)的組件和工程中。這樣,你就可以在不影響彼此的情況下,分別管理和訪問各自的靜態(tài)資源。

問題小結(jié)

最終發(fā)現(xiàn)是在應(yīng)用組件中做了下面幾件事導(dǎo)致異常一直不斷:

1.組件內(nèi)自定義了靜態(tài)資源處理器

2.組件內(nèi)自定義靜態(tài)資源處理器時(shí)是通過集成org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport實(shí)現(xiàn)得,沒有通過實(shí)現(xiàn)接口org.springframework.web.servlet.config.annotation.WebMvcConfigurer來實(shí)現(xiàn)。

3.配置靜態(tài)資源處理器時(shí)寫法上不一致,本應(yīng)該是

@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/test/**")
                .addResourceLocations("classpath:/ui/test/");
    }

而寫成了

@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/test/**")
                .addResourceLocations("classpath:/ui/")
                .addResourceLocations("file:" + filePath)
                .setCachePeriod(3600);
    }

到此這篇關(guān)于springboot應(yīng)用中靜態(tài)資源訪問與接口請(qǐng)求沖突的文章就介紹到這了,更多相關(guān)springboot靜態(tài)資源訪問與接口請(qǐng)求沖突內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java 開啟多線程常見的4種方法

    Java 開啟多線程常見的4種方法

    本文主要介紹了Java 開啟多線程常見的4種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Java實(shí)現(xiàn)石頭剪刀布游戲

    Java實(shí)現(xiàn)石頭剪刀布游戲

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)石頭剪刀布游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • Java中IO流文件讀取、寫入和復(fù)制的實(shí)例

    Java中IO流文件讀取、寫入和復(fù)制的實(shí)例

    下面小編就為大家?guī)硪黄狫ava中IO流文件讀取、寫入和復(fù)制的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • 在Java中Collection的一些常用方法總結(jié)

    在Java中Collection的一些常用方法總結(jié)

    今天給大家?guī)淼闹R(shí)是關(guān)于Java的,文章圍繞著Java中Collection的一些常用方法展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 詳解Springboot下載Excel的三種方式

    詳解Springboot下載Excel的三種方式

    本文給大家分享Springboot下載Excel三種方式,主要分為瀏覽器下載和代碼本地下載實(shí)現(xiàn)的方式,針對(duì)每種實(shí)現(xiàn)方式給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-07-07
  • Java 繼承與多態(tài)的深入理解

    Java 繼承與多態(tài)的深入理解

    這篇文章主要介紹了Java 繼承與多態(tài)的深入理解的相關(guān)資料,子類繼承父類的特征和行為,使得子類具有父類的各種屬性和方法?;蜃宇悘母割惱^承方法,使得子類具有父類相同的行為,需要的朋友可以參考下
    2017-08-08
  • Linux中JDK安裝配置教程

    Linux中JDK安裝配置教程

    這篇文章主要為大家詳細(xì)介紹了Linux中JDK安裝配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 喜大普奔IntelliJ IDEA 可以使用中文了

    喜大普奔IntelliJ IDEA 可以使用中文了

    IntelliJ Idea最大的亮點(diǎn)開始支持中文,很多英語不好的童鞋有福了,今天通過本文給大家分享如何開啟中文漢化,通過圖文步驟給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-05-05
  • SpringBoot原理之自動(dòng)配置機(jī)制詳解

    SpringBoot原理之自動(dòng)配置機(jī)制詳解

    Springboot遵循“約定優(yōu)于配置”的原則,使用注解對(duì)一些常規(guī)的配置項(xiàng)做默認(rèn)配置,減少或不使用xml配置,讓你的項(xiàng)目快速運(yùn)行起來,下面這篇文章主要給大家介紹了關(guān)于SpringBoot原理之自動(dòng)配置機(jī)制的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • 簡單易懂的java8新特性之lambda表達(dá)式知識(shí)總結(jié)

    簡單易懂的java8新特性之lambda表達(dá)式知識(shí)總結(jié)

    一直想針對(duì)lambda表達(dá)式作一個(gè)總結(jié),借助于這次公司安排的考試作一個(gè)入門式的總結(jié),對(duì)正在學(xué)習(xí)java的小伙伴們非常有幫助,需要的朋友可以參考下
    2021-05-05

最新評(píng)論