springmvc與fastjson的整合,註解@RequestBody的使用

  項目內容用的是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 

相關文章
相關標籤/搜索