一、處理 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)


