問題
springMVC中使用redirect方式進行接口重定向時,默認http返回碼是302,該返回碼會強制將原本post請求轉換成get,而對於重定向後只支持post請求的接口可能會拋出method not support異常,以下是抓包的情況。
解決思路
在http重定向中,post方法可以重定向成get和post,如果要強制轉換成post,我們需要在重定向的返回碼設置爲307
案例
下面以自己的demo爲例,展示如何在springMVC中使用307返回碼重定向
@PostMapping("doReissue")
public RedirectView doReissue(HttpServletRequest request, @RequestBody PointIssueTradeReq req) {
//設置response status爲TEMPORARY_REDIRECT
request.setAttribute(
View.RESPONSE_STATUS_ATTRIBUTE, HttpStatus.TEMPORARY_REDIRECT);
//重定向的新地址
return new RedirectView(request.getContextPath()+"/forward/pointIssue");
}
再次抓包,重定向的狀態碼爲307,兩次請求均爲post,問題解決
參考文檔:https://www.baeldung.com/spring-redirect-and-forward