首先@RequestBody須要接的參數是一個string化的json,這裏直接使用JSON.stringify(json)這個方法來轉化(切記,若是傳遞json對象時會報錯,根本走不到後臺本身寫的方法,直接在框架中報錯。com.alibaba.fastjson.JSONException: error parse false 也就是解析錯誤) 其次@RequestBody,從名稱上來看也就是說要讀取的數據在請求體裏,因此要發post請求 第三,要設置contentType,contentType:"application/json,明確的告訴服務器發送的內容是json,而默認的contentType是application/x-www-form-urlencoded;charset=UTF-8那麼能夠開始寫出代碼了: $.ajax({ type: "post", contentType:"application/json", url: "repairs/saveDispatches", data: JSON.stringify(dispatchesDTO), success: function(data){ if(!data.success){ alertError("派工失敗"); }else{ alertSuccess("派工成功"); } }) 後臺怎麼接呢?這就輪到@RequestBody出馬了 @RequestMapping("/repairs/saveDispatches") public void saveDispatches(@RequestBody DispatchesDTO dispatchesDTO, HttpServletResponse response) throws IOException { dispatchesService.saveDispatches(dispatchesDTO); success(response); } 很簡單吧,無需手動進行json與實體的轉換,只要能映射上去(也就是字段名和json的key相對應,value能夠匹配上數據類型),那麼就能夠直接轉換。 如何定義「能映射上去」呢?如果json中的key在實體中都能找到對應的field,那麼就是「能映射上去」,也就是說: 前臺傳入的json中的key在實體中必需要存在,否則就會報錯,相似下面的錯誤 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下 <!--Spring3.1開始的註解 HandlerAdapter --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> </bean> </list> </property> </bean>web
固然也能夠經過<mvc:annotation-driven />來簡單的配置,這裏就不過多介紹了~ajax
最後再要提到幾點spring
1、若 一、前臺發送請求時未指定contentType爲json/application 二、Spring中未配置messageConverter 那麼會報錯誤415,也就是類型不支持 前者是由於Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported 然後者是由於Content type 'application/json;charset=UTF-8' not supported 2、因爲Spring中使用的json轉換用到的是jackson,因此須要引入jackson包 怎麼使用springmvc的@requestbody 返回json數據 先配置 XXX_ servletxmljson
<!-- 整合jackson 返回一個json格式 -->服務器
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter"/> </list> </property> </bean> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/> 再而後Action方法裏註解就能夠 @RequestMapping(value="/XXXXXX", method = RequestMethod.POST) @ResponseBody public 返回類型 XXXXXX(){ } @responsebody通常在什狀況下使用,他的好處與壞處? @responsebody表示該方法的返回結果直接寫入HTTP response body中 通常在異步獲取數據時使用,在使用@RequestMapping後,返回值一般解析爲跳轉路徑,加上@responsebody後返回結果不會被解析爲跳轉路徑,而是直接寫入HTTP response body中。好比異步獲取json數據,加上@responsebody後,會直接返回json數據。mvc
三,若是傳遞的數據中若是有時間類型,要格外注意一下,對於 01/21/2000 00::00:00這種格式的屬性在轉化的時候會出現錯誤,須要在使用的時候本身處理一下。app