如何在传递给 HttpServletResponse.sendRedirect 的 URL 中禁用大括号评估
How to disable curly braces evaluation in URL passed to HttpServletResponse.sendRedirect
我有一个 URL shortner,它应该将 sendRedirect(URL) 发送到用户指定的 URLs。
有时 URL 包含像这样的大括号:http://example.com?someparam={something}
。
我在 Tomcat 服务器上的 Spring MVC 应用程序没有向客户端浏览器发送响应 302,而是给出了没有文本的错误 404。
显然这是某种 URL 变量评估,我可以禁用它吗?我找不到有关此功能的文档。
这无效 Google 搜索 URL http://google.com/{something}
。应该是 https://www.google.ca/search?q=http{302}
重点放在 search?q 上。在域名之后,您指定了您的服务名称,然后如果您想传递一些输入,则查询字符串。
当您执行 http://google.com/{something}
时,您确实没有任何资源或服务,因为 {something}
所以 404 是预期的输出。
HTTP 302 用于重定向,我不确定您为什么期望重定向。
URL 编码也无济于事,因为问题与 resource/service 有关到 404.
我知道这是一个老问题,但我认为 OP 正在寻找一种方法来防止 Spring 在重定向 URL
中进行变量替换
我遇到了完全相同的问题,修复方法是使用 RedirectView
在 RedirectView 中你可以设置 setExpandUriTemplateVariables(false)
这使得它重定向到完全没有 Spring 给出的 url 试图替换其中的任何内容
代码如下所示
RedirectView redirect = new RedirectView(redirectUrl);
redirect.setExpandUriTemplateVariables(false);
return new ModelAndView(redirect);
希望对您有所帮助
我有一个 URL shortner,它应该将 sendRedirect(URL) 发送到用户指定的 URLs。
有时 URL 包含像这样的大括号:http://example.com?someparam={something}
。
我在 Tomcat 服务器上的 Spring MVC 应用程序没有向客户端浏览器发送响应 302,而是给出了没有文本的错误 404。
显然这是某种 URL 变量评估,我可以禁用它吗?我找不到有关此功能的文档。
这无效 Google 搜索 URL http://google.com/{something}
。应该是 https://www.google.ca/search?q=http{302}
重点放在 search?q 上。在域名之后,您指定了您的服务名称,然后如果您想传递一些输入,则查询字符串。
当您执行 http://google.com/{something}
时,您确实没有任何资源或服务,因为 {something}
所以 404 是预期的输出。
HTTP 302 用于重定向,我不确定您为什么期望重定向。
URL 编码也无济于事,因为问题与 resource/service 有关到 404.
我知道这是一个老问题,但我认为 OP 正在寻找一种方法来防止 Spring 在重定向 URL
中进行变量替换我遇到了完全相同的问题,修复方法是使用 RedirectView 在 RedirectView 中你可以设置 setExpandUriTemplateVariables(false)
这使得它重定向到完全没有 Spring 给出的 url 试图替换其中的任何内容
代码如下所示
RedirectView redirect = new RedirectView(redirectUrl);
redirect.setExpandUriTemplateVariables(false);
return new ModelAndView(redirect);
希望对您有所帮助