java 板


LINE

※ 引述《lueichun (= =)》之銘言: : ※狀況概述: : 就是我寫的一段測試CODE,可以回傳Map或是JSON格式的字串,透過HttpResponse的Body : 回傳,然後Map和字串被jQuery Ajax的回調函數取得,進而取出Map和字串裡面的value。 : ※程式碼: : 以下是透過servlet回傳一個map: : @RequestMapping(value = "/search/api/getSearchResult.do") : public Map<String,Object> getSearchResultViaAjax(HttpServletRequest request) : { : Map<String,Object> map = new HashMap<>(); : String username = request.getParameter("username"); : String email = request.getParameter("email"); : map.put("username", username); : map.put("email", email); : return map; : } : 以下是透過servlet回傳json格式字串: : @RequestMapping(value = "/search/api/getSearchResult1.do") : public String getSearchResultViaAjax1(HttpServletRequest request) { : //透過ajax傳送query string,直接用getParameter取值 : Map<String,Object> map = new HashMap<>(); : String username = request.getParameter("username"); : String email = request.getParameter("email"); : map.put("username", username); : map.put("email", email); : String json = new Gson().toJson(map); : return json; : } : 然後map跟json格式字串回傳回前端的回調函數: : $.getJSON( : "/TestSpring4Ajax2/search/api/getSearchResult1.do", : $.param(search), : function(data) { : var json = "<h4>Ajax Response</h4><pre>" : + data.email + "</pre>"; : $('#feedback').html(json); : }); : ※補充說明: : 以上的code沒有問題可正常執行,但我不懂的是為何java物件傳回去後,可以直接當成 : JavaScript物件來使用,是jQuery有做甚麼轉換?或是javaScript本身支援這種用法?? : 我目前知道的是上面那個data物件是JavaScript物件,所以才可以直接用 : 屬性名稱來取值(data.email)。然後從servlet回傳的又是java物件,看起來就很像是 : java物件在回傳過程中轉換成對應的JavaScript物件,可是這樣理解感覺很怪, : 請問有更好的理解方式嗎??或是說為何可以直接把回調函數的參數,當成一般的 : JavaScript物件來使用?? 目前我的理解,是在後端若回傳Map物件、且透過某些方法 例如添加@ResponseBody註釋在方法開頭,或使用gson套件將物件轉為json格式...... 的話,這個Map物件就會自動被後端轉成json格式物件然後才回傳前端; jQuery接收到這個json格式物件,會將其自動解析成原生JS物件。 再將其交給JQuery AJAX回呼函數之參數。 那如果從後端回傳的不是map物件,而是arraylist物件, 後端透過@ResponseBody註釋,一樣會將這arraylist物件,自動轉型成json格式物件。 然後這個arraylist版本的json格式物件回到前端, 會被自動解析成js array物件,再轉交給回呼函數的參數。 --------------------------------------- 總之,透過@ResponseBody註釋,就不需要另外添加gson套件,也能自動將java物件轉成 json格式物件; Map物件就轉成map版本的json格式物件、 arraylist物件就轉成arraylist版本的json格式物件。 然後就回傳到前端了,接著 在前端JQuery這邊,再將各版本的json格式物件,轉型成各自對應型別之js物件。 map版本的json格式物件就轉成js map物件。 arraylist版本的json格式物件就轉成js array物件。 這就是在JQuery AJAX函數中,後端java物件跟前端js物件兩者之間的關係。 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.125.132.92 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/java/M.1723626321.A.C78.html
1F:推 GGing: 其實在 class level 加@RestController 就會自動轉 json了 09/01 15:35
2F:→ GGing: ,效果等同於@Controller + @ResponseBody 09/01 15:35







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP