SpringMVC 返回json的兩種方式

前后臺數據交互使用json是一種很重要的方式.本文主要探討SpringMVC框架使用json傳輸的技術.

請注意,本文所提到的項目使用Spring?版本是4.1.7,其他版本在具體使用上可能有不一樣的情況.

一、最常見——使用@RequestBody的注解返回一個實體對象;

使用方式如下:

1:引入jar包:

jackson-core、jackson-databind、jackson-annotion;

Spring4以上的版本這么配置,需要jackson的版本在2以上.

maven依賴

 
<properties>
<jackson.version>2.7.3</jackson.version>
</properties>

<!--
https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>${jackson.version}</version></dependency>

2:Spring配置:

<mvc:annotation-driven/>

Spring4以上版本使用?<mvc:annotation-driven/>即包含了默認的配置,能夠轉化json,其他版本可能需要額外配置.

3:后臺:

@RequestMapping("/entity")public @ResponseBody Entity returnJson(){return new Entity("chentao","A handsome man");}

關鍵就是@ResponseBody注解,否則Spring會去映射與路徑匹配的jsp文件

4:前臺

這個路徑是可以直接調用的,結果會直接輸出到,但是一般來說,會使用jquery?Ajax來獲取數據:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Welcome Page</title><!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations --><scriptsrc="https://code.jquery.com/jquery-3.2.1.min.js"integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="crossorigin="anonymous"></script>
</head>
<body><h2>Hello World!</h2>
<div id="div1">
</div>
</body>
<script>$.get("/json/entity",function (data) {$("#div1").html(data);})
</script>
</html>

結果

?

a:不添加@ResponseBody注解的情況,通過鏈接注解訪問:

?

?

可以看到Spring?MVC框架這個時候去找/json/entity.jsp這個文件的.

?

b:添加@ResponseBody注解后:

?

json數據能正確返回了.

?

二、更加靈活的方式——將json數據放進Request中交互。

Spring MVC使用@ResponseBody的方式確實很簡單,但是我們有時也會遇到這樣的場景 ,就是訪問一個新頁面時,可能既要找到新的頁面又要拿到新的數據去繪制頁面。

這種時候如果使用@ResponseBody這種方式,那么就需要使用ajax技術,向后臺請求兩次,一次請求頁面,一次請求數據。

如果希望通過一次請求就完成這個目標,那么就應該返回一個ModelAndView的對象,這樣SpringMVC既可以跳轉到一個頁面,也能把數據傳輸到Request中。

使用方式:

1:相關jar包:

使用對象轉化為Json的相關jar包,一般來說使用的時json-lib,實際上類似的框架和技術還有很多,比如上面的jackson就能做,不過筆者習慣于使用json-lib,使用起來會更方便和順手一點。

maven:? ?

<!-- https://mvnrepository.com/artifact/net.sf.json-lib/json-lib --><dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version></dependency>

2:Spring 配置:無

3:后臺:

@RequestMapping("/page")public ModelAndView returnView(){ModelAndView mv = new ModelAndView();mv.setViewName("showJson");Entity entity = new Entity("chentao","a handsome man");JSONObject entityJson = JSONObject.fromObject(entity);mv.addObject("entityJson",entityJson);return mv;}

關鍵是JSONObject.fromObject()方法。

4:前臺:

<script>var json = ${entityJson};alert(json);
</script>

注意這里的El表達式寫法${entityJson},瀏覽器在進行渲染之前,tomcat已經將${entityJson}替換為json字符串。這個時候json直接就是一個可以使用的對象而不再需要進行轉化

結果如下;

?

注意,這種方式只有在jsp頁面中才有效果,如果不是jsp頁面,只能乖乖使用第一種方式了。

三、總結

?@Response注解的方式返回ModelAndView方式
優點編寫簡單;適合當前ajax方式;更加靈活,頁面和數據一同返回。
缺點靈活性不足

需要手動轉化json;

前臺接受數據只能用在jsp頁面里。

實現要點@ResponseBody;jackson-jar包;ajax;JsonObject.fromObject();El表達式:${}.
???

?

四、擴展

本文檔使用的是SpringMVC框架,實際上第一種方式本質上是使用Response的writer對象來傳遞數據,而第二種方式使用request傳遞數據。所以如果使用原生servlet或者其他框架也是能夠實現類似的功能的。

?

轉載于:https://www.cnblogs.com/ct-csu/p/8157418.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453778.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453778.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453778.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

word上怎么把圖片拼接到一起_如何用Word把自己插入的兩張圖片合在一起?

例如上面效果的設置方法&#xff1a;1、單擊插入----圖片按鈕&#xff1b;2、彈出插入圖片對話框&#xff0c;按住Ctrl鍵&#xff0c;同時選擇所需要的圖片&#xff1b;3、選中圖片&#xff0c;單擊圖片工具格式----文字環繞----緊密型環繞&#xff1b;4、此時&#xff0c;用鼠…

深度學習之卷積神經網絡 ResNet

論文 Identity Mappings in Deep Residual Networks 2015年&#xff0c;ResNet&#xff08;Residual Neural Network&#xff09;由微軟研究院的Kaiming He等四名華人提出&#xff0c;并在ILSVRC2015比賽中取得冠軍&#xff0c;在top5上的錯誤率為3.57%&#xff0c;同時參數量…

按照RFC3984協議實現H264視頻流媒體 RTSP H264

轉自&#xff1a;http://topic.csdn.net/u/20100104/16/0fd992e8-b0a6-4c2b-85a4-d9513d3b1491.html 相信有不少人和我一樣&#xff0c;希望實現H264格式視頻的流媒體播放。但是對于一個新手來說&#xff0c;往往不知道從何入手。利用百度&#xff0c;GOOGLE等搜索資料真是沙里…

搭建SSM框架之Spring

作為一枚大四準備畢業的學生&#xff0c;最重要的事便是畢業設計&#xff0c;前些日子剛剛拿到畢設題目&#xff1a;“3D網絡圖&#xff1a;面向網絡結構數據的可視化軟件設計”&#xff0c;(⊙o⊙)…&#xff0c;怎么說哪&#xff0c;看到題目就是一頭霧水&#xff08;前幾屆不…

audio unity 加速_淺談Unity中Android、iOS音頻延遲

在Unity上面做音游&#xff0c;當在移動端實機運行起來&#xff0c;會發現&#xff0c;音頻的發出會有一定的延遲&#xff0c;無論是長音效還是短音效&#xff0c;Unity內置的Audio內部使用的是FMOD&#xff0c;有以下手段改善通過設置稍微改善其延遲的問題Edit → Project Set…

深度學習之 hard negative mining (難例挖掘)

Hard Negative Mining Method 思想 hard是困難樣本&#xff0c;negative是負樣本&#xff0c;hard negative就是說在對負樣本分類時候&#xff0c;loss比較大&#xff08;label與prediction相差較大&#xff09;的那些樣本&#xff0c;也可以說是容易將負樣本看成正樣本的那些…

單列表_使用Excel中的quot;記錄單quot;功能快速錄入數據

在Excel中進行數據錄入的時候&#xff0c;平常都是一行一行地錄入數據&#xff0c;但是有時候在單元格之間&#xff0c;行與行&#xff0c;列與列之間頻繁地切換去錄入數據&#xff0c;費事費力還容易出錯。今天給你推薦一個既好用又有效率的Excel中的隱藏功能——“記錄單”。…

CentOS 6.9下的Setup工具(用于管理服務/防火墻/網絡配置/驗證服務)

說明&#xff1a;Setup工具套件好像是CentOS下特有的用于管理服務/防火墻/網絡配置等&#xff0c;其實就是基于命令行模式界面的GUI工具。唯一特點就是方便。 安裝&#xff1a; #安裝Setup命令工具 yum -y install setuptool #安裝Setup工具配套的系統服務組件 yum -y insta…

wireshark解析rtp協議,流媒體中的AMR/H263/H264包的方法

原文教程&#xff1a;http://hi.baidu.com/zjxiaoyu3/blog/item/22f9f18f32b45de5f11f3670.html 抓到完整的流媒體包之后&#xff0c;用wireshark打開&#xff0c;其中的包可能不會自動映射成RTP&#xff0b;AMR&#xff0f;H263&#xff0f;H264的包&#xff0c;做如下修改操作…

深度學習之非極大值抑制(Non-maximum suppression,NMS)

非極大值抑制&#xff08;Non-maximum suppression&#xff0c;NMS&#xff09;是一種去除非極大值的算法&#xff0c;常用于計算機視覺中的邊緣檢測、物體識別等。 算法流程 給出一張圖片和上面許多物體檢測的候選框&#xff08;即每個框可能都代表某種物體&#xff09;&…

148. 顏色分類

給定一個包含紅&#xff0c;白&#xff0c;藍且長度為 n 的數組&#xff0c;將數組元素進行分類使相同顏色的元素相鄰&#xff0c;并按照紅、白、藍的順序進行排序。 我們可以使用整數 0&#xff0c;1 和 2 分別代表紅&#xff0c;白&#xff0c;藍。 注意事項 不能使用代碼庫中…

vue項目token放在哪里_關于vue動態菜單的那點事

vue-element-admin4.0國內節點訪問地址&#xff1a;https://panjiachen.gitee.io/vue-element-admin-site/zh/本此使用的是https://github.com/PanJiaChen/vue-element-admin/tree/i18n 國際化分支的版本。說是除了國際化其他都一樣。本文主要介紹前臺動態的使用資源權限。后臺…

H264學習方法歷程資料

我的H.264學習歷程 半年前&#xff0c;我知道了H.264這個名詞。那個時候決定學習H.264&#xff0c;可是我連資料都不知道如何收集。而且整個學校就只有我一個人在學習H.264&#xff0c; 找不到人交流&#xff0c;所以那個時候學得真的是舉步維艱&#xff0c;很痛苦&#xff0c…

深度學習之 ROI Pooling

什么是ROI&#xff1f; ROI是 Region of interest 的簡寫&#xff0c;指的是 Faster R-CNN 結構中&#xff0c;經過 RPN 層后&#xff0c;產生的 proposal 對應的 box 框。 ROI Pooling 顧名思義&#xff0c;是 pooling 層的一種&#xff0c;而且是針對 ROIs 的 pooling。整個…

KD樹小結

很久之前我就想過怎么快速在二維平面上查找一個區域的信息&#xff0c;思考許久無果&#xff0c;只能想到幾種優秀一點的暴力。 KD樹就是干上面那件事的。 別的不多說&#xff0c;趕緊把自己的理解寫下來&#xff0c;免得涼了。 KD樹的組成 以維護k維空間(x,y,……)內的KD樹為例…

多元函數求極值中的a_多元函數的條件極值和拉格朗日乘數法

、條件極值、拉格朗日乘數法1. 轉化為無條件極值在討論多元函數極值問題時&#xff0c;如果遇到除了在定義域中尋求駐點(可能的極值點)外&#xff0c;對自變量再無別的限制條件&#xff0c;我們稱這類問題為函數的無條件極值。如求的極值&#xff0c;就是無條件極值問題。然而在…

深度學習之 RPN(RegionProposal Network)- 區域候選網絡

anchor boxes基本概念與作用: feature map 上的一個點可以映射回輸入圖片上的一個點&#xff0c;以特征圖上這個點為中心&#xff0c;預先人為設定 k 個 boxes&#xff0c;這些 boxes 就稱為在這個點上生成的 k 個 anchor boxes&#xff08;所有anchor boxes的中心點坐標是一樣…

h264的碼率控制 JVT-G012

開始看h264的碼率控制&#xff0c;很多地方都提到 G012&#xff0c;拿來做為參考比較&#xff0c;看來很有必要研究清楚。 偶這人&#xff0c;E文文檔不翻譯的話&#xff0c;看過就忘了&#xff0c;于是草草翻譯了下&#xff0c;因為不打算做B幀&#xff0c;也不準備在同一幀中…

Android RecyclerView嵌套EditView實時更新Item數據

一、場景&#xff08;例如&#xff1a;購物車&#xff09; 1、當我們需要以列表樣式管理某些數據時&#xff0c;可能需要列表項的某個字段可編輯 2、編輯Item上的某個字段后可能還要更新相關字段的值 二、可能遇到的問題 1、列表滑動導致輸入框中的數據錯位&#xff08;或者焦點…

workbench拓撲優化教程_優化技術在水泵水力設計的應用(上篇)

文章來源&#xff1a;安世亞太官方訂閱號&#xff08;搜索&#xff1a;Peraglobal&#xff09;CFD技術在泵的內流數值模擬、研究泵內部流動規律和結構方面已廣泛應用&#xff0c;取得了很多成果。但是初步設計的產品如果通過CFD仿真得到的性能曲線不能滿足使用要求&#xff0c;…