可能有点不寻常的情况,但是我们需要在Spring MVC控制器中重定向:
/js/hal-browser/browser.html
为:
/js/hal-browser/browser.html#/some_path/
我迄今为止尝试的所有解决方案都导致了重定向循环,因为Spring执行重定向,但随后在重定向URL中重复匹配/browser.html,无论其他信息如何。我需要说的是'匹配/browser.html只有它是路径的终点'。
我在setUseSuffixPatternMatch(Boolean.FALSE);
上尝试PathMatchConfigurer
无效,还在请求映射中尝试了以下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浏览器中,并使用正确的入口点片段作为服务的上下文路径 - 这很好。问题是浏览器本身有一个“转到入口点”按钮,当它以webjar的形式拉入时,会被硬编码到/
。另一种方法是放弃webjar,只需复制浏览器的静态文件并更新入口点。
答案 0 :(得分:2)
#
之后的部分永远不会被发送到服务器,所以在这种情况下,你总是会在循环中结束相同的请求。
你可以做的是在你的控制器中添加一个自定义标题,并通过使用headers
属性的否定使你的控制器只截取不存在标题的代码,这里是一个伪代码
@RequestMapping(value=[YOUR MAPPING], method=RequestMethod.GET, headers="!CustomHeader")
答案 1 :(得分:1)
您可以尝试不重定向用户,但是使用某些javascript发回您想要的内容,以使客户端浏览器在加载后跳转到锚点,例如类似的东西:
.subboto a:hover {
border-top: 1px dashed #f7a319;
}