通過SpringMVC框架響應(yīng)JSON數(shù)據(jù)
1. 通過SpringMVC框架響應(yīng)JSON數(shù)據(jù)
在SpringMVC框架(含SpringBoot框架)中,當(dāng)處理請求的方法之前添加了@ResponseBody后,或在控制器類之前使用的是@RestController,處理請求的方法的返回值將作為響應(yīng)到客戶端的數(shù)據(jù)。
當(dāng)服務(wù)器向客戶端響應(yīng)數(shù)據(jù)時,SpringMVC框架會使用“轉(zhuǎn)換器”(Converter)將方法的返回值進(jìn)行轉(zhuǎn)換,及處理響應(yīng)時的響應(yīng)頭(Response Headers)等內(nèi)容,針對返回值類型不同,SpringMVC框架還會自動使用不同的轉(zhuǎn)換器。
當(dāng)響應(yīng)數(shù)據(jù)的類型(處理請求的方法的返回值類型)是String時,會自動使用StringHttpMessageConverter轉(zhuǎn)換器,該轉(zhuǎn)換器就會自動將返回的字符串作為數(shù)據(jù)響應(yīng)到客戶端,并且,還會設(shè)置響應(yīng)頭,默認(rèn)情況下,在響應(yīng)頭中會設(shè)置Content-Type屬性,其值是text/html; charset=ISO-8859-1,所以,在SpringMVC框架(不含SpringBoot框架)中,默認(rèn)情況下,響應(yīng)的String是不支持中文的!
當(dāng)響應(yīng)數(shù)據(jù)的類型是SpringMVC框架默認(rèn)并不識別的類型時,且當(dāng)前開發(fā)環(huán)境添加了jackson-databind依賴,SpringMVC框架會自動使用jackson-databind中的轉(zhuǎn)換器,而jackson-databind中的轉(zhuǎn)換器的工作方式就是將響應(yīng)結(jié)果組織成JSON格式的數(shù)據(jù),并且,將響應(yīng)頭中的Content-Type設(shè)置成了application/json; charset=UTF-8!
在項目中只需要確保添加了jackson-databind依賴即可,并不需要進(jìn)行額外的配置,也不需要顯式的使用到該框架中的某個類!
如果是使用XML進(jìn)行相關(guān)配置的SpringMVC項目,需要在Spring的配置文件中開啟注解驅(qū)動,即在配置文件中添加:
<annotation-driven />
總的來說,如果需要SpringMVC框架能夠響應(yīng)JSON格式的數(shù)據(jù),需要:
使用@RestController或@ResponseBody注解;
在項目中添加jackson-databind依賴;
自定義處理請求的方法的返回值類型(只要是自定義的類型,就一定是SpringMVC框架默認(rèn)不識別的類型)
當(dāng)然,某個控制器類中,如果已經(jīng)使用了@RestController注解,會表示“當(dāng)前控制器類中處理的所有請求都將響應(yīng)數(shù)據(jù)”,就不會執(zhí)行轉(zhuǎn)發(fā)或重定向的操作了,如果一定要執(zhí)行轉(zhuǎn)發(fā)或重定向,可以:
不使用@RestController注解,而是在每個需要響應(yīng)數(shù)據(jù)的方法之前逐一添加@ResponseBody注解;
在使用@RestController的情況下,將需要轉(zhuǎn)發(fā)或重定向的方法的返回值類型聲明為ModelAndView類型。