如何在传递给 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);

希望对您有所帮助