2017-04-20 119 views
2

我正在使用spring-boot-starter-jerseyspring-boot-starter-tomcat(v。1.5.2)開發Web服務,因此,我寧願不添加spring-boot-starter-web,這使我的配置更加複雜。我想將Swagger UI靜態文件粘貼到一個文件夾中並從那裏提供。我可以使用spring-boot-starter-tomcat提供靜態內容,但不使用spring-boot-starter-web?

我想知道的是,我可以只使用spring-boot-starter-tomcat服務靜態文件嗎?我發現Spring documentation saying that I can server static content from a variety of sources on the classpath,但我發現的例子似乎需要Spring MVC。我試過禁用Jersey並將src/main/resources/static中的靜態文件僅用於測試Tomcat,但是當我轉到localhost/index.html時,出現404未找到錯誤。

正如您從我的路徑中可以看出的,我使用的是Maven。

由於您可以只使用Tomcat提供靜態文件,所以似乎我應該可以使用spring-boot-starter-tomcat來提供靜態文件。如果是這種情況,我在哪裏放置這些文件?

換句話說,我已經開始使用Spring-provided spring-boot-sample-jersey project。我有一個要求Jersey Web服務應答對根地址(/)的呼叫。我將如何添加一些靜態內容(HTML,CSS,JS)以從名爲/ swagger的子目錄中提供?

回答

1

因此默認的servlet(它提供靜態內容)是默認註冊的。但它將只使用搜索特定路徑作爲文檔根目錄。我不得不通過源代碼去挖掘finally find it。如果您在AbstractEmbeddedServletContainerFactory看,你會看到

private static final String[] COMMON_DOC_ROOTS = { 
     "src/main/webapp", "public", "static" }; 

如果我們沒有明確設置文檔根目錄,以上三個都將被搜索的路徑。爲了找到存在的第一個目錄,將用作文檔根目錄。我已驗證所有這些工作。

如果你想設置一個不同的目錄,你可以使用一個定製豆

@Bean 
public EmbeddedServletContainerCustomizer tomcatCustomizer() { 
    return new EmbeddedServletContainerCustomizer() { 
     @Override 
     public void customize(ConfigurableEmbeddedServletContainer container) { 
      container.setDocumentRoot(new File("src/main/resources/static")); 
     } 
    }; 
} 

有一件事我還沒有想出是,如果我們可以提供文件作爲類路徑的資源,而不是文件系統資源。如果你看看我鏈接到的源代碼,它有一些代碼查找META-INF/resources的存在。我認爲這可能有效,但不幸的是它不適合我。也許Spring Boot團隊的一些人可以啓發我們。

+0

這和你在http://stackoverflow.com/questions/29658240/spring-boot-jersey-allow-jersey-to-serve-static-content上給出的答案使我能夠將Swagger UI添加到我的Spring Boot中+ Jersey webapp,無需添加Spring Boot Web。謝謝!現在,如果我能找到解決Swagger UI不支持摘要式身份驗證的方法。 –

相關問題