Spring,使用POST重定向到外部URL

8
在下面的Spring 3.1操作中,我需要做一些事情并将属性添加到POST请求中,然后通过POST将其重定向到外部URL(我不能使用GET)。
@RequestMapping(value = "/selectCUAA", method = RequestMethod.POST)
public ModelAndView selectCUAA(@RequestParam(value="userID", required=true) String cuaa, ModelMap model) {
    //query & other...
    model.addAttribute(PARAM_NAME_USER, cuaa);
    model.addAttribute(... , ...);
    return new ModelAndView("redirect:http://www.externalURL.com/", model);
}

但是使用这段代码时,会使用GET方法(将属性附加到http://www.externalURL.com/)。我该如何使用POST方法?外部URL要求必须使用POST方法。


2
那么这就不是一个重定向。重定向总是导致GET请求。如果你想要一个POST请求,你将不得不从Java代码中调用URL并传递结果。 - M. Deinum
请参见http://programmers.stackexchange.com/questions/99894/why-doesnt-http-have-post-redirect。 - M. Deinum
2个回答

5

像@stepanian说的那样,你不能使用POST进行重定向。 但是有几个解决方法:

  1. 使用简单的HttpUrlConnection,并使用POST。然后输出响应流。这个方法有效,但我在CSS方面遇到了一些问题。
  2. 在您的控制器中执行操作,然后将结果数据重定向到一个虚拟页面。该页面将通过JavaScript自动执行POST,无需用户交互(更多细节):

html:

<form name="myRedirectForm" action="https://processthis.com/process" method="post">
    <input name="name" type="hidden" value="xyz" />
    <input name="phone" type="hidden" value="9898989898" />
    <noscript>
        <input type="submit" value="Click here to continue" />
    </noscript>
</form>
    <script type="text/javascript">

        $(document).ready(function() {
            document.myRedirectForm.submit();
        });

    </script>

这是另一个支持这一点的例子,我喜欢这个实用类 https://github.com/keycloak/keycloak/blob/b478472b3578b8980d7b5f1642e91e75d1e78d16/common/src/main/java/org/keycloak/common/util/HttpPostRedirect.java - Phillip Fleischer

3

您无法使用POST重定向。但是,您可以使用类似HttpURLConnection的Java代码发送POST请求以在操作中进行处理。


好的,谢谢。我使用了这个例子:https://dev59.com/yXA75IYBdhLWcg3wYX9Q 我的Spring控制器selectCUAA现在应该返回什么?我需要重定向到新的网页。 - Accollativo
代码触发的POST请求完成后,您可以进行重定向。 - stepanian
没有属性的重定向?这样做就像调用一个post和get之后,结果只会是最后一个get吗?(新的url是需要在post上使用参数的登录页面)。 不过还是谢谢,星期一我会尝试一下。 - Accollativo
你可以从post中获取响应并在get response中将其返回给用户。 - stepanian
我在互联网上看了一下,但我感到更加困惑。你能给我展示一个修改我的selectCUAA控制器的例子吗? - Accollativo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接