項目內容用的是jetty框架,傳輸數據格式是json格式,有一天我心血來潮,把項目又搭建了一次,完了,卡在了數據傳輸的格式上,明明原來框架直接用fastjson,可是我用就是不對,老是報fastjson這個類沒法加載。當時把依賴配置所有拆開了,一點一點的加,終於找到緣由了,可是當時不懂。上週日在家用springmvc框架,也想用fastjson傳輸數據,問題來了。不過解決了,在此總結一下,但願給跟我遇到一樣問題的人一個解答。html
一、springmvc原來的註解@RequestBody 解析的請求數據是字符串類型,若是直接配置請求數據格式爲com.alibaba.fastjson.JSONObject,那麼會拋出下面的異常:java
Controller [springMVCmybatis.modifyController] Method [public java.lang.Object springMVCmybatis.modifyController.addEmpGetStu(com.alibaba.fastjson.JSONObject) throws java.lang.Exception]
這是由於@RequestBody解析請求的數據的時候會用StringHttpMessageConverter類,將http請求的body解析成String類型。若是想用JSON來接收數據,那麼就要配置httpMessageConverter類,因此也能夠本身定義解析的方式。下面就是在applicationContext.xml文件中的配置。spring
二、在applicationContext.xml文件中配置以下代碼,這樣就能夠用FastJson來解析數據了。json
<mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> <value>application/json</value> <value>application/xml;charset=UTF-8</value> </list> </property> <property name="features"> <list> <!-- 默認的意思就是不配置這個屬性,配置了就不是默認了 --> <!-- 是否輸出值爲null的字段 ,默認是false--> <value>WriteMapNullValue</value> <value>WriteNullNumberAsZero</value> <value>WriteNullListAsEmpty</value> <value>WriteNullStringAsEmpty</value> <value>WriteNullBooleanAsFalse</value> <value>WriteDateUseDateFormat</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
三、fastJson能夠將傳輸過來的數據直接轉換成對象,這一點比較好,省去了中間轉換的麻煩,這裏我就舉一個Student的例子。服務器
postMan請求的數據json數據格式以下:mybatis
{ "id" : null, "name": "張三", "clas":"2", "interest" : "" }
服務器的代碼以下:mvc
@RequestMapping(value = {"/modifyStu.do"},method={RequestMethod.POST}, consumes={"application/json"}, produces={"application/json"}) @ResponseBody public Object addEmpGetStu(@RequestBody Student student)throws Exception { JSONObject responseObj = (JSONObject)JSONObject.toJSON(student); return responseObj ;
postMan接收到的數據以下,能夠看見id輸入的是null,可是返回的是0,就是由於配置中將整數輸入爲null,轉換成0app
{ "clas": "2", "interest": "", "name": "張三", "id": 0 }
【參考博客】框架
一、https://my.oschina.net/yehun/blog/872218post
二、http://blog.csdn.net/qq_21989939/article/details/46739567