項目內容用的是jetty框架,傳輸數據格式是json格式,有一天我心血來潮,把項目又搭建了一次,完了,卡在了數據傳輸的格式上,明明原來框架直接用fastjson,但是我用就是不對,總是報fastjson這個類無法加載。當時把依賴配置全部拆開了,一點一點的加,終於找到原因了,但是當時不懂。上周日在家用springmvc框架,也想用fastjson傳輸數據,問題來了。不過解決了,在此總結一下,希望給跟我遇到同樣問題的人一個解答。
1、springmvc原來的注解@RequestBody 解析的請求數據是字符串類型,如果直接配置請求數據格式為com.alibaba.fastjson.JSONObject,那么會拋出下面的異常:
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文件中的配置。
2、在applicationContext.xml文件中配置如下代碼,這樣就可以用FastJson來解析數據了。
<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>
3、fastJson可以將傳輸過來的數據直接轉換成對象,這一點比較好,省去了中間轉換的麻煩,這里我就舉一個Student的例子。
postMan請求的數據json數據格式如下:
{
"id" : null,
"name": "張三",
"clas":"2",
"interest" : ""
}
服務器的代碼如下:
@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,轉換成0
{
"clas": "2",
"interest": "",
"name": "張三",
"id": 0
}
【參考博客】
1、https://my.oschina.net/yehun/blog/872218
2、http://blog.csdn.net/qq_21989939/article/details/46739567
