一个不同寻常的场景也许,但我们需要在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(否则是,这将是直截了当) –