@RequestBody應用

原文出處:http://blog.csdn.net/u012345283/article/details/39938183

之前寫過一篇記錄文章,寫的是將一個比較複雜的數據結構在前臺組合起來後傳遞到後臺。

當時並不太瞭解@RequestBody,也並沒有使用js提供的JSON.stringify()方法

所有都是自己寫的,比如js將json轉爲字符串的方法,後臺接收json轉成實體的方法。


最近接觸到了@RequestBody,於是想將之前的代碼改寫一下。

首先@RequestBody需要接的參數是一個string化的json,這裏直接使用JSON.stringify(json)這個方法來轉化

其次@RequestBody,從名稱上來看也就是說要讀取的數據在請求體裏,所以要發post請求

第三,要設置contentType,contentType:"application/json,明確的告訴服務器發送的內容是json,而默認的contentType是application/x-www-form-urlencoded; charset=UTF-8

那麼可以開始寫出代碼了:

[javascript] view plain copy
  1. $.ajax({  
  2.     type: "post",  
  3.     contentType:"application/json",  
  4.     url: "repairs/saveDispatches",  
  5.     data: JSON.stringify(dispatchesDTO),  
  6.     success: function(data){  
  7.         if(!data.success){  
  8.           alertError("派工失敗");  
  9.         }else{  
  10.         alertSuccess("派工成功");  
  11.     }  
  12. })  

後臺怎麼接呢?這就輪到@RequestBody出馬了

[java] view plain copy
  1. @RequestMapping("/repairs/saveDispatches")  
  2. public void saveDispatches(@RequestBody DispatchesDTO dispatchesDTO,  
  3.         HttpServletResponse response) throws IOException {  
  4.   
  5.     dispatchesService.saveDispatches(dispatchesDTO);  
  6.     success(response);  
  7. }  

很簡單吧,無需手動進行json與實體的轉換,只要能映射上去(也就是字段名和json的key相對應,value可以匹配上數據類型),那麼就可以直接轉換。

如何定義“能映射上去”呢?若是json中的key在實體中都能找到對應的field,那麼就是“能映射上去”,也就是說:

前臺傳入的json中的key在實體中必須要存在,不然就會報錯,比如下面這個前臺傳入的json中多了一個key爲id的鍵值對

org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unrecognized field "id" (Class com.westsoft.kft.repairs.dto.DispatchesDTO), not marked as ignorable


其實要使用@RequestBody這個註解還需要額外配置一個Bean,也就是自動幫我們接收json並轉成對象的消息轉換器messageConverter

由於我使用的是Spring3.1之後的版本,那麼配置在RequestMappingHandlerAdapter下

[html] view plain copy
  1. <!--Spring3.1開始的註解 HandlerAdapter -->  
  2. <bean  
  3.     class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">  
  4.     <property name="messageConverters">  
  5.         <list>  
  6.             <bean  
  7.                 class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">  
  8.             </bean>  
  9.         </list>  
  10.     </property>  
  11. </bean>  

當然也可以通過<mvc:annotation-driven />來簡單的配置,這裏就不過多介紹了~


最後再要提到幾點

一、若1、前臺發送請求時未指定contentType爲json/application 2、Spring中未配置messageConverter

那麼會報錯誤415,也就是類型不支持

前者是因爲Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported

而後者是因爲Content type 'application/json;charset=UTF-8' not supported


二、由於Spring中使用的json轉換用到的是jackson,所以需要引入jackson包


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章