1. 程式人生 > >SpringMVC在處理Ajax請求後返回void導致前臺Ajax回撥函式不執行

SpringMVC在處理Ajax請求後返回void導致前臺Ajax回撥函式不執行

問題簡述

在一次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的原始碼。