一文搞懂JSON和攔截器

JSON

JSON(JavaScript Object Notation,JS對象標記)是一種輕量級的數據交換格式。它是基於JavaScript的一個子集,使用了C、C++、C#、Java、JavaScript、Perl、Python等其他語言的約定,採用完全獨立於編程語言的文本格式來存儲和表示數據。

JSON的特點

JSON與XML非常相似,都是用來存儲數據的,並且都是基於純文本的數據格式。與XML相比,JSON解析速度更快,佔用空間更小,且易於閱讀和編寫,同時也易於機器解析和生成。

JSON的兩種數據結構

1.對象結構
在對象結構以“{”開始,以“}”結束。中間部分由0個或多個以英文“,”分隔的name:value對構成(注意name和value之間以英文“:”分隔),其存儲形式如下圖所示。

JSON對象數據結構的關鍵字(key)必須爲String類型,值(value)可以是String、Number、Object、Array等數據類型。
在這裏插入圖片描述
例如:{“city”:“Beijing”,“street”:“Xisanqi”,“postcode”:100096}
2.數組結構
數組結構以“[”開始,以“]”結束。中間部分由0個或多個以英文“,”分隔的值的列表組成,其存儲形式如下圖所示。
在這裏插入圖片描述
例如:[“abc”,12345,false,null]
對象、數組數據結構也可以分別組合構成更爲複雜的數據結構。
如果使用JSON存儲單個數據(如“abc”),一定要使用數組的形式,不要使用Object形式,因爲Object形式必須是“名稱:值”的形式。

JSON數據轉換

Spring提供了一個HttpMessageConverter<T>接口來實現瀏覽器與控制器類(Controller)之間的數據交互。該接口主要用於將請求信息中的數據轉換爲一個類型爲T的對象,並將類型爲T的對象綁定到請求方法的參數中,或者將對象轉換爲響應信息傳遞給瀏覽器顯示。

在配置JSON轉換器時,除了常用的<mvc:annotation-drivern />方式配置外,還可以使用<bean>標籤的方式進行顯示的配置。具體配置方式如下:
在這裏插入圖片描述
MappingJackson2HttpMessageConverter是Spring MVC默認處理JSON格式請求響應的實現類。要使用它對數據進行轉換,就需要使用Jackson的開源包,開發時所需的開源包及其描述如下所示:
jackson-annoations-2.8.8.jar:JSON轉換註解包;
jackson-core-2.8.8.jar:JSON轉換核心包;
jackson-databind-2.8.8.jar:JSON轉換的數據綁定包。

在使用註解式開發時,需要用到2個重要的JSON格式轉換註解,分別爲@RequestBody和@ResponseBody
在這裏插入圖片描述

RESTful

RESTful也稱之爲REST,是英文“Representational State Transfer”的簡稱。可以將他理解爲一種軟件架構風格或設計風格,而不是一個標準。
RESTful風格在HTTP請求中,使用put、delete、post和get方式分別對應添加、刪除、修改和查詢的操作。

傳統的URL請求格式爲:http://.../queryItems?id=1
採用RESTful風格後,其URL請求爲:http://.../items/1
動詞形式的路徑變成了名詞,參數id=1變成了請求路徑的一部分。(不能出現動詞)

攔截器

Spring MVC中的攔截器(Interceptor)類似於Servlet中的過濾器(Filter),它主要用於攔截用戶請求並作相應的處理。例如通過攔截器可以進行權限驗證、記錄請求信息的日誌、判斷用戶是否登錄等。

攔截器類的兩種定義方式

1.通過實現HandlerInterceptor接口,或繼承HandlerInterceptor接口的實現類(如HandlerInterceptorAdapter)來定義。
2.通過實現WebRequestInterceptor接口,或繼承WebRequestInterceptor接口的實現類來定義。

HandlerInterceptor的三個方法

preHandle():該方法會在控制器方法前執行,其返回值表示是否中斷後續操作。當其返回值爲true時,表示繼續向下執行;當其返回值爲false時,會中斷後續的所有操作。
postHandle():該方法會在控制器方法調用之後,且解析視圖之前執行。可以通過此方法對請求域中的模型和視圖做出進一步的修改。
afterCompletion():該方法會在整個請求完成,即視圖渲染結束之後執行。可以通過此方法實現一些資源清理、記錄日誌信息等工作。
繼承WebRequestInterceptor可以定義Spring MVC中的攔截器。

攔截器的配置

要使自定義的攔截器類生效,還需要在Spring MVC的配置文件中進行配置。
在這裏插入圖片描述
注意:<mvc:interceptor>中的子元素必須按照上述代碼的配置順序進行編寫,否則文件會報錯。

單個攔截器的執行流程

在這裏插入圖片描述

多個攔截器的執行流程

在這裏插入圖片描述
這裏給出一個攔截器的典型應用場景:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章