如何在传递给HttpServletResponse.sendRedirect

时间:2016-02-18 10:16:41

标签: java spring-mvc tomcat servlets curly-braces

我有一个URL缩短器,应该将sendRedirect(URL)发送到用户指定的URL。 有时URL包含大括号,如下所示:http://example.com?someparam={something}

而不是将响应302发送到客户端浏览器,我在Tomcat服务器上的Spring MVC应用程序给出错误404而没有文本。

显然它正在进行某种URL变量评估,我可以禁用它吗?我找不到有关此功能的文档。

2 个答案:

答案 0 :(得分:2)

我知道这是一个老问题,但我认为OP正在寻找一种方法来阻止Spring在重定向URL中进行变量替换

我遇到了完全相同的问题,修复方法是使用RedirectView 在RedirectView中,您可以设置setExpandUriTemplateVariables(false)

这使得它重定向到完全没有Spring试图替换它中的任何内容的URL

这是代码的样子

        RedirectView redirect = new RedirectView(redirectUrl);
        redirect.setExpandUriTemplateVariables(false);
        return new ModelAndView(redirect);

希望有所帮助

答案 1 :(得分:0)

这不是有效的Google搜索网址http://google.com/{something}。应该是https://www.google.ca/search?q=http{302}

重点在于搜索?q 。在域名之后,您已指定服务名称,然后在要传递某些输入时查询字符串。

当您执行http://google.com/{something}时,您实际上没有{something}的任何资源或服务,因此404是预期的输出。

HTTP 302用于重定向,我不确定为什么你期望重定向。

网址编码也无济于事,因为问题与资源/服务有关,如果不存在,那么您将获得404.网址编码并不意味着解决与404相关的问题。