開發(fā)必掌握!Json數(shù)據(jù)交互和ResTful開發(fā)
本文轉載自微信公眾號「程序員千羽」,作者程序員千羽。轉載本文請聯(lián)系程序員千羽公眾號。
GitHub:https://github.com/nateshao/ssm/tree/master/109-springmvc-json-restful
1. JSON數(shù)據(jù)交互
什么是JSON?
JSON(JavaScript Object Notation,JS對象標記)是一種輕量級的數(shù)據(jù)交換格式。它是基于JavaScript的一個子集,使用了C、C++、C#、Java、JavaScript、Perl、Python等其他語言的約定,采用完全獨立于編程語言的文本格式來存儲和表示數(shù)據(jù)。
JSON有什么特點?
- JSON與XML非常相似,都是用來存儲數(shù)據(jù)的,并且都是基于純文本的數(shù)據(jù)格式。與XML相比,JSON解析速度更快,占用空間更小,且易于閱讀和編寫,同時也易于機器解析和生成。
JSON有如下兩種數(shù)據(jù)結構:
- 對象結構
- 數(shù)組結構
JSON對象結構
在對象結構以“{”開始,以“}”結束。中間部分由0個或多個以英文“,”分隔的name:value對構成(注意name和value之間以英文“:”分隔),其存儲形式如下圖所示。
對象結構的語法結構代碼如下:
例如:一個address對象包含城市、街道、郵編等信息,使用JSON的表示形式如下:{"city":"Beijing","street":"Xisanqi","postcode":100096}
JSON數(shù)組結構
“數(shù)組結構以“[”開始,以“]”結束。中間部分由0個或多個以英文“,”分隔的值的列表組成,其存儲形式如下圖所示。
對象結構的語法結構代碼如下:
- [
- value1,
- value2,
- ...
- ]
例如,一個數(shù)組包含了String、Number、Boolean、null類型數(shù)據(jù),使用JSON的表示形式如下:
- ["abc",12345,false,null]
對象、數(shù)組數(shù)據(jù)結構也可以分別組合構成更為復雜的數(shù)據(jù)結構。例如:一個person對象包含name、hobby和address對象,其代碼表現(xiàn)形式如下:
- {
- "name": "zhangsan"
- "hobby":["籃球","羽毛球","游泳"]
- "address":{
- "city":"Beijing"
- "street":"Xisanqi"
- "postcode":100096
- }
- }
注意:如果使用JSON存儲單個數(shù)據(jù)(如“abc”),一定要使用數(shù)組的形式,不要使用Object形式,因為Object形式必須是“名稱:值”的形式。
JSON數(shù)據(jù)轉換
Spring提供了一個HttpMessageConverter接口來實現(xiàn)瀏覽器與控制器類(Controller)之間的數(shù)據(jù)交互。該接口主要用于將請求信息中的數(shù)據(jù)轉換為一個類型為T的對象,并將類型為T的對象綁定到請求方法的參數(shù)中,或者將對象轉換為響應信息傳遞給瀏覽器顯示。
HttpMessageConverter< T >接口有很多實現(xiàn)類,這些實現(xiàn)類可以對不同類型的數(shù)據(jù)進行信息轉換。其中MappingJackson2HttpMessageConverter是Spring MVC默認處理JSON格式請求響應的實現(xiàn)類。該實現(xiàn)類利用Jackson開源包讀寫JSON數(shù)據(jù),將Java對象轉換為JSON對象和XML文檔,同時也可以將JSON對象和XML文檔轉換為Java對象。
要使用MappingJackson2HttpMessageConverter對數(shù)據(jù)進行轉換,就需要使用Jackson的開源包,開發(fā)時所需的開源包及其描述如下所示:
- jackson-annoations-2.8.8.jar:JSON轉換注解包;
- jackson-core-2.8.8.jar:JSON轉換核心包;
- jackson-databind-2.8.8.jar:JSON轉換的數(shù)據(jù)綁定包。
下載地址:http://mvnrepository.com/artifact/com.fasterxml.jackson.core
使用的注解
在使用注解式開發(fā)時,需要用到2個重要的JSON格式轉換注解,分別為@RequestBody和@ResponseBody,關于這兩個注解的說明如下表所示:
JSON數(shù)據(jù)轉換代碼演示:
多學一招:1.使用< bean >標簽方式的JSON轉換器配置
小提示:使用< bean >標簽配置注解方式的處理器映射器和處理器適配器必須配對使用。
多學一招:2. 配置靜態(tài)資源的訪問方式
除了使用< mvc:resources >元素可以實現(xiàn)對靜態(tài)資源的訪問外,還有另外2種靜態(tài)資源訪問的配置方式,分別如下:
1.在springmvc-config.xml文件中,使用< mvc:default-servlet-handler >標簽
- <mvc:default-servlet-handler />
2.激活Tomcat默認的Servlet來處理靜態(tài)文件訪問
- <!--激活tomcat的靜態(tài)資源攔截,需要哪些靜態(tài)文件,再往下追加-->
- <servlet-mapping>
- <servlet-name>default</servlet-name>
- <url-pattern>*.js</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>default</servlet-name>
- <url-pattern>*.css</url-pattern>
- </servlet-mapping>
- ...
以上兩種方式本質上是一樣的,都是使用Web服務器默認的Servlet來處理靜態(tài)資源文件的訪問。其中Servelt名稱也是由使用的服務器來確定的,不同的服務器需要使用不同的名稱,常用服務器及其Servlet名稱如下:
- Tomcat, Jetty, JBoss, and GlassFish默認Servlet的名稱—— "default";
- Google App Engine默認Servlet的名稱——"_ah_default";
- Resin默認Servlet的名稱——"resin-file";
- WebLogic默認Servlet的名稱—— "FileServlet";
- WebSphere默認Servlet的名稱——"SimpleFileServlet"。
2. RESTful支持
什么是RESTful?
你回去了解一下RESTful風格之前也寫過
“RESTful也稱之為REST,是英文“Representational State Transfer”的簡稱。可以將他理解為一種軟件架構風格或設計風格,而不是一個標準。
簡單來說,RESTful風格就是把請求參數(shù)變成請求路徑的一種風格。
代碼演示:將采用RESTful風格的請求實現(xiàn)對用戶信息的查詢,同時返回JSON格式的數(shù)據(jù)。
小結
主要對Spring MVC中的JSON數(shù)據(jù)交互和RESTful風格的請求進行了詳細的講解。
首先簡單介紹了JSON的概念、作用和結構,
然后通過案例講解了Spring MVC中如何實現(xiàn)JSON數(shù)據(jù)的交互。
接著講解了什么是RESTful,最后通過用戶信息查詢案例來演示RESTful的實際使用。
通過這篇文章的學習,我們可以掌握Spring MVC中的JSON數(shù)據(jù)交互和對RESTful風格支持,這對今后實際工作開發(fā)有極大的幫助。