一個不同尋常的場景也許,但我們需要在Spring MVC控制器重定向:春@RequestMapping重定向到相同的路徑與其他信息
/js/hal-browser/browser.html
到:
/js/hal-browser/browser.html#/some_path/
我所有的嘗試迄今爲止的解決方案導致了一個重定向循環,因爲Spring執行重定向,但是隨後在重定向URL中重複匹配/browser.html,而不管其他信息如何。我需要說的是'只有在匹配路徑的末尾時才匹配/browser.html'。
我曾嘗試在PathMatchConfigurer
setUseSuffixPatternMatch(Boolean.FALSE);
無果,也試過以下URI模板正則表達式模式在請求映射本身:
"/js/hal-browser/{file:browser\\.html$}"
..但仍然獲得了重定向循環。理念讚賞 - 這是SpringBoot 1.2.3微服務中的Spring 4.1.6,通過上下文。
更新: 在進一步的調查,並更好地理解在由HAL瀏覽器使用,以確定URL片段的哪條路徑就會使一個請求到微服務本身,我相信該解決方案可以在儘量不說謊重定向browser.html
,因爲Spring會將其映射到每個請求上的相同控制器方法而不管片段值如何,而是恢復爲HAL瀏覽器設置爲默認條目的應用程序的默認上下文路徑(/
)或者找到一種方法來配置嵌入式tomcat容器,以便在默認上下文路徑上響應某些合理的(不僅僅是404)響應,即使應用映射到/ some_path。
作爲進一步的上下文,我們可以根據/browser
(或其他)的便利路徑將任何問題都重定向到HAL瀏覽器,並將正確的入口點片段作爲服務的上下文路徑 - 工作正常。問題是瀏覽器本身有一個'Go to entry point'按鈕,當它作爲webjar被拉入時,它被硬編碼爲/
。另一種選擇是放棄webjar,只需複製瀏覽器的靜態文件並更新入口點。
'#'是一個特殊的字符,永遠不會發送到服務器,服務器只能看到之前的部分。 –
你真的需要在服務器上執行這種重定向嗎?你不能簡單地在JavaScript中添加'#/ some_path /'到位置嗎? – axtavt
@axtavt - 不容易,因爲hal瀏覽器被拉入作爲webjar(否則是,這將是直截了當) –