Spring @RequestMapping重定向到具有其他信息

时间:2015-04-23 10:57:01

标签: java spring spring-mvc spring-boot microservices

可能有点不寻常的情况,但是我们需要在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,只需复制浏览器的静态文件并更新入口点。

2 个答案:

答案 0 :(得分:2)

#之后的部分永远不会被发送到服务器,所以在这种情况下,你总是会在循环中结束相同的请求。

你可以做的是在你的控制器中添加一个自定义标题,并通过使用headers属性的否定使你的控制器只截取不存在标题的代码,这里是一个伪代码

@RequestMapping(value=[YOUR MAPPING], method=RequestMethod.GET, headers="!CustomHeader")

答案 1 :(得分:1)

您可以尝试不重定向用户,但是使用某些javascript发回您想要的内容,以使客户端浏览器在加载后跳转到锚点,例如类似的东西:

.subboto a:hover {
    border-top: 1px dashed #f7a319;
}