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