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/cn.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灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP