SpringMVC(九)處理 JSON:使用 HttpMessageConverter

一、處理 JSON

1. 加入 jar 包:

2. 編寫目標(biāo)方法,使其返回 JSON 對(duì)應(yīng)的對(duì)象或集合

3. 在方法上添加 @ResponseBody 注解

二、HttpMessageConverter<T>

HttpMessageConverter<T>是 Spring3.0 新添加的一個(gè)接 口,負(fù)責(zé)將請(qǐng)求信息轉(zhuǎn)換為一個(gè)對(duì)象(類型為 T),將對(duì)象( 類型為 T)輸出為響應(yīng)信息

HttpMessageConverter<T>接口定義的方法:

Boolean canRead(Class?clazz,MediaType mediaType): 指定轉(zhuǎn)換器 可以讀取的對(duì)象類型,即轉(zhuǎn)換器是否可將請(qǐng)求信息轉(zhuǎn)換為 clazz 類型的對(duì) 象,同時(shí)指定支持 MIME 類型(text/html,applaiction/json等)

Boolean canWrite(Class?clazz,MediaType mediaType):指定轉(zhuǎn)換器 是否可將 clazz 類型的對(duì)象寫到響應(yīng)流中,響應(yīng)流支持的媒體類型在MediaType 中定義。LIst getSupportMediaTypes():該轉(zhuǎn)換器支持的媒體類型。

T read(Class clazz,HttpInputMessage inputMessage):? 將請(qǐng)求信息流轉(zhuǎn)換為 T 類型的對(duì)象。

void write(T t,MediaType contnetType,HttpOutputMessgae outputMessage):將T類型的對(duì)象寫到響應(yīng)流中,同時(shí)指定相應(yīng)的媒體類型為 contentType。

HttpMessageConverter<T> 的實(shí)現(xiàn)類

DispatcherServlet 默認(rèn)裝配RequestMappingHandlerAdapter ,而RequestMappingHandlerAdapter 默認(rèn)裝配如下HttpMessageConverter:

加入 jackson jar 包后, RequestMappingHandlerAdapter裝配的 HttpMessageConverter 如下:

使用 HttpMessageConverter 將請(qǐng)求信息轉(zhuǎn)化并綁定到處理方法的入?yún)⒅谢驅(qū)㈨憫?yīng)結(jié)果轉(zhuǎn)為對(duì)應(yīng)類型的響應(yīng)信息,Spring 提供了兩種途徑:

(1)使用 @RequestBody / @ResponseBody 對(duì)處理方法進(jìn)行標(biāo)注

(2)使用 HttpEntity<T>/ ResponseEntity<T> 作為處理方法的入?yún)⒒蚍祷刂?/p>

當(dāng)控制器處理方法使用到 @RequestBody/@ResponseBody 或HttpEntity<T>/ResponseEntity<T> 時(shí), Spring 首先根據(jù)請(qǐng)求頭或響應(yīng)頭的Accept 屬性選擇匹配的 HttpMessageConverter, 進(jìn)而根據(jù)參數(shù)類型或 泛型類型的過(guò)濾得到匹配的 HttpMessageConverter, 若找不到可用HttpMessageConverter 將報(bào)錯(cuò)

@RequestBody 和 @ResponseBody 不需要成對(duì)出現(xiàn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,955評(píng)論 1 92
  • 自己備忘,隨便寫 android網(wǎng)絡(luò)框架源碼解析及對(duì)比 android常用網(wǎng)絡(luò)框架對(duì)比 Volley: 特點(diǎn) 基于...
    幻海流心閱讀 1,695評(píng)論 0 4
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,618評(píng)論 19 139
  • 電影帶給我們什么??jī)H僅是一個(gè)故事,一句經(jīng)典的對(duì)白,一種思考或表達(dá)嗎?這些我們通過(guò)閱讀和交談等其他的方式也同樣可以得...
    精進(jìn)的醫(yī)生閱讀 559評(píng)論 6 6
  • 四 (比賽開(kāi)始) 因?yàn)闀r(shí)間緣故,本場(chǎng)雖分為四場(chǎng),但是每場(chǎng)比賽時(shí)間為十分鐘。 第一場(chǎng),先是大二的學(xué)長(zhǎng)控住了球。結(jié)果,...
    方喋閱讀 412評(píng)論 0 0

友情鏈接更多精彩內(nèi)容