後臺使用@RequestBody接收,anglarJs向後臺傳遞Json資料,報415或400錯誤
阿新 • • 發佈:2019-01-09
今天想到以前碰到的一個問題,在使用angularJs+ssm寫東西時碰到的一個使用$http.post()傳遞Json時報錯 415 (Unsupported Media Type) 和400 (Bad Request) 錯誤。當時是這麼寫的:
後臺是使用的SpringMVC的@RequestBody註解:
public @ResponseBody Map<String,Object> test(@RequestBody Map<String, Object> map){
...
}
前臺angularJs的是如此:
var data=['abc',123']; $http.post(url,data).success( function(data) {..}
然而在提交資料的時候報錯 415 (Unsupported Media Type)
當發生 415 錯誤時首先確認專案中是否匯入了Jackson的一系列jar包(本文已經匯入,就不在討論)。
仔細一查,發現是請求文字型別
Content-Type: application/x-www-form-urlencoded 的問題,不是我們需要的 application/json 如下:所以換了另一種提交方式 :
然而這樣的確不報 415 錯誤了,可是卻報了400 (Bad Request) 錯誤。這就懵逼了,這時又檢查了請求的資訊:var data=['abc',123']; $http({ method : 'POST', url : url, data : data, headers : { 'Content-type' : 'application/json;charset=UTF-8' } }).success( function(data) {...}
看著也沒啥不對的啊,為啥就是報錯了呢。
後來明白了,原來angularJs的transformRequest會幫你把資料進行處理,所以重新設定一下就可以成功提交了:
$http({ method : 'POST', url : url, data : data, headers : { 'Content-type' : 'application/json;charset=UTF-8' }, transformRequest : function(obj) { return angular.toJson(obj); } }).success( function(data) {...}
到這裡就完全可以解決400和415的錯誤了。
如果到這裡還是出現 415 錯誤時就要考慮是不是沒有匯入@RequestBody和@ResponseBody所依賴的JacksonJar包了
核心包分別是:
jackson-annotations.jar,jackson-core.jar,jackson-databind.jar, jackson-mapper-asl.jar
匯入專案就可以了
希望文章可以幫助到其他博友。