SpringMVC在處理Ajax請求後返回void導致前臺Ajax回撥函式不執行
阿新 • • 發佈:2018-12-15
問題簡述
在一次SpringMVC專案中,前臺通過Ajax請求,準備修改資料庫中的資料。因為Ajax請求只是讓後臺更改資料,所以Controller方法根本不需要返回給前臺任何資料,所以我們將Controller的方法的返回值設定為void。但令我困擾的是,前端頁面本應該執行的回撥函式一直不執行。
開啟控制態發現報404錯誤。我又通過debug發現該請求是可以進入Controller方法的,讓我很不解的是為什麼我已經進入Controller的方法中並處理完成了,但居然報404錯,如下圖:
解決方案
我們需要在返回值前面加上一個@ResponseBody註解,因為即使方法返回值為void,spring也會按照前臺請求過來的頁面地址去找,找不到就會報上圖的404錯誤。
@RequestMapping("/customer/update.action")
public @ResponseBody void updateAjax(Customer customer){
customerService.update(customer);
}
也就是說,我們對於接受Ajax請求的Controller方法,不管是否需要返回資料,都需要在返回值前面加上@ResponseBody註解,或者說通過Response手動回寫一段資料,例如:“OK”。也可以解決上面的問題。
@RequestMapping("/customer/update.action") public void updateAjax(HttpServletResponse response,Customer customer) throws IOException{ customerService.update(customer); response.getWriter().write("ok"); }
至於這麼做的底層原理需要分析SpringMVC的原始碼。