2015-04-03 33 views
7

我不是Spring專家,並且是它的黑盒子,即使使用Spring的文檔,也很難自己弄清楚事情的真相。有時,我只是不知道我在尋找什麼才能開始我的搜索......Spring Boot:爲RestControllers配置一個url前綴

在我的Spring Boot應用程序中,我試圖弄清楚如何爲我的所有配置一個唯一的URL前綴RestControllers。

我真的在這裏之後是讓我的靜態內容從根上下文「/」提供,但有我的RestController端點可以從不同的上下文訪問,比如說「/ api/*」。

我知道如何通過application.properties更改應用程序的默認上下文,但這並不完全是我所追求的。當我談到servlet,映射等時,我在這裏表現出我的無知,因爲我說我試圖爲兩種不同類型的內容獲得兩種不同的上下文。

+1

爲什麼使用而不是使用內容協商相同的網址向不同的表示方法不同的網址嗎? – chrylis 2015-04-03 20:46:40

回答

6

我認爲這是一個有效的觀點,儘管將它分成兩個(或多個應用程序)是很常見的。假設您想要處理(1)提供HTML/CSS/JS的網站和(2)REST API。在你的控制器的頂部,你通過@RequestMapping(你不能有兩個,所以那些會在不同的控制器,再次,取決於你想要達到的目的)定義的「語境」:

  • @RequestMapping(/web)
  • @RequestMapping(/api/v1)

...,然後將這些控制器內部,在這些方法中,你CA分配「的URL的其餘部分」,再通過使用@RequestMapping(value = "/index", method = RequestMethod.GET)

例如/web/index/web/error;以及:/api/v1/something,/api/v1/something-else

有一個不錯的包裝規範將幫助你不要迷失與這麼多控制器

注意:記住你不需要在每一種方法中重複相同的上下文,而只需要「其餘的URL」。

+0

非常感謝!我希望有一種更全面的配置方式,但我完全可以給控制器一個路徑,而不僅僅是它的方法。這工作,並且非常簡單。 =) – therrin150 2015-04-04 02:28:11

0

我不知道是否有幫助,我剛剛發佈了一個解決方案,我在另一個線程測試:

How to configure a default @RestController URI prefix for all controllers?

+0

鏈接的答案在這種情況下不起作用,因爲它會禁用靜態內容的服務,但是我已經爲該問題添加了附加答案,但沒有此問題。 請參閱http://stackoverflow.com/questions/34801351/how-to-configure-a-default-restcontroller-uri-prefix-for-all-controllers/39716758#39716758 – 2016-09-27 13:59:12