後臺使用@RequestBody接收,anglarJs向後臺傳遞Json數據,報415或400錯誤

今天想到以前碰到的一個問題,在使用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 如下:

所以換了另一種提交方式 :

	
var data=['abc',123'];
 $http({
	method : 'POST',
	url : url,
	data : data,
	headers : {
		'Content-type' : 'application/json;charset=UTF-8'
	}
}).success( function(data) {...}
然而這樣的確不報 415 錯誤了,可是卻報了400 (Bad Request) 錯誤。這就懵逼了,這時又檢查了請求的信息:

看着也沒啥不對的啊,爲啥就是報錯了呢。

後來明白了,原來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

導入項目就可以了

希望文章可以幫助到其他博友。

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