2013年7月9日

Spring MVC 3 實作教學 (4) - AJAX 請求處理與回傳 JSON 格式資料 ( Get and return JOSN )

上一篇有討論了基本的參數傳遞與處理,但缺少了 AJAX 範例的應用,因此本篇要繼續討論 Controller 是如何處理 AJAX 請求以及如何回傳 JSON 格式資料。



本篇繼續沿用 Spring MVC 實作教學 (3) 的範例,之前使用 Form 標籤來達成目的,接下來我們只需要將它改寫成使用 AJAX 的方法即可 ( AJAX 部份為使用 JQuery 提供的函式 ) 。一樣模擬使用者填寫資料的畫面 ( /WebContent/pages/home.jsp ),操作畫面如下:


填寫資料頁面程式碼內容如下:


可以看到上述內容 Request 目的地為  /handleAJAXRequest ,傳入參數分別為名稱與年齡兩個欄位, AJAX 部份還包含一個 call back function 判斷回傳資料彈出訊息。故我們的 Controller 需要有一個對應的 Method,Controller 內容如下:


比較之前範例 @RequestMapping、@RequestParam 這兩個部份寫法相同,這次多了 @ResponseBody 以及你是否發現這次的 Method 增加了回傳型態?

@ResponseBody
於此加入這個 @ResponseBody Annotation 意思在於告訴 Spring 該 Method 執行完畢是要將資料回傳到前端,並非回傳 View。故我們 handleAJAXRequest 這個範例回傳的是一個 Map,我們將需要回傳的資料丟進 Map。你當然也可以回傳其他類型的物件或者是你自行定義的物件。

Controller 照上述修改完後若你直接執行程式,很不幸地的會得錯誤訊息:HTTP Status 406 - The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers.,這是因為你還沒有提供 Spring 處理 JSON 的 Library,Spring MVC 預設處理 JSON 的 Library 版本為 Jackson,所以可以到 Jackson 官方網站下載最新的檔案並加至 /WEB-INF/lib 底下 ( core 、mapper 都要 )。

提醒:在下載 Jackson 的檔案可以看到它有分為 ASL 與 LGPL 兩個版本,這是關於軟體 License 問題並非程式面的問題,詳細可以參考此討論

上述問題處理完成後,重新執行功能就會正常運作,我們在前面 JSP 部份已經將回傳資料如何取得的部份已經寫完了,如下圖:


成功執行畫面,如下圖:


以上即完成 AJAX Request 處理以及 JSON 格式資料回傳處理。其他 Spring Framework 相關教學可以參考本篇整理


熱門文章