Spring MVC的GET/重定向/POST

7
说我有两个Spring MVC服务:
@RequestMapping(value = "/firstMethod/{param}", method = RequestMethod.GET)
public String firstMethod(@PathVariable String param) {
    // ...
    // somehow add a POST param
    return "redirect:/secondMethod";
}

@RequestMapping(value = "/secondMethod", method = RequestMethod.POST)
public String secondMethod(@RequestParam String param) {
    // ...
    return "mypage";
}

第一个方法能否重定向到第二个(POST)方法?使用第二个方法作为GET或使用会话不可取。

感谢您的回复!


1
你真的需要重定向吗?为什么不直接从firstMethod调用this.secondMethod(param)呢? - Yevgeniy
在这个例子中,我可以。但是如果secondMethod有许多不同的参数,例如@CookieValue,那将会很不方便。 - Nailgun
@Yevgeniy 我不能直接调用Java方法的主要原因是我希望用户在浏览器地址栏中看到“/secondMethod”。 - Nailgun
然后重定向是正确的方式...这意味着 MethodRequest.GET - Yevgeniy
1个回答

2
您不应该将HTTP GET重定向到HTTP POST。HTTP GET和HTTP POST是两个不同的事物,它们的行为预期非常不同(GET是安全、幂等和可缓存的,而POST是幂等的)。详情请参见HTTP GET和POST的语义和限制http://www.w3schools.com/tags/ref_httpmethods.asp
您可以这样做:也使用RequestMethod.GET注释secondMethod。然后您应该能够进行所需的重定向。
@RequestMapping(value = "/secondMethod", method = {RequestMethod.GET, RequestMethod.POST})
public String secondMethod(@RequestParam String param) {
...
}

但请注意,secondMethod可以通过HTTP GET请求调用。


1
由于调用POST方法n次将导致n个更新,因此POST不是幂等的。 - Abdullah Khan

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