開宗明義--解決辦法:
1、先排查字段拼寫錯誤等等問題
2幔嗦、補充一個比較坑的問題虎敦,查看如下兩個路徑的文件看看編譯文件有沒有更新游岳。
如果并未更新,清掉編譯文件:
3其徙、查看是否導入下列幾個包:
jackson-core-2.8.4.jar
jackson-annotations-2.8.4.jar
jackson-databind-2.8.4.jar
maven導入
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.4</version>
</dependency>
4胚迫、再補充一個:必須保證請求頭的Content-Type為application/json
即使用ajax的話,必須加上contentType : 'application/json'
如果使用Postman測試的話如下操作:
①唾那、在Headers添加:
②访锻、在body中使用json傳值
詳解:
了解到@RequestBody的強大后自然想試一試,于是按照網上的方法試一試,感謝SpringMVC接收復雜集合參數
.jsp頁面:
$("button").click(function(){
var users = [];
var user1 = {"userId":1,"userName":"abc","password":"addf","age":12};
var user2 = {"userId":2,"userName":"abc2","password":"addf2","age":12};
users.push(user1);
users.push(user2);
$.ajax({
type: "POST",
url: 'springmvc/testRequestBody.html',//后臺在類上加了/springmvc
data : JSON.stringify(users),
dataType:"json",
contentType : 'application/json',
success: function(data){
console.log(data);
},
error: function(res){
console.log(res);
console.log("fail");
}
});
});
后臺代碼:
private static final String SUCCESS = "success";
@RequestMapping(value = "/testRequestBody")
@ResponseBody
public String testRequestBody(@RequestBody List<User> users){
System.out.println(users);
return SUCCESS;
}
一期犬、發(fā)現(xiàn)問題
然而河哑,總是出現(xiàn)415錯誤,網上找了很久解決辦法龟虎,但是沒有找到有用的璃谨,故此只能去看看Spring的官方文檔,然后找到22.3.3. Defining @RequestMapping handler methods,再找到 Mapping the request body with the @RequestBody annotation(可以使用ctrl+f,快速定位^ _ ^)
看不了的鲤妥,點擊
其中最重要的是讓我發(fā)現(xiàn)HttpMessageConverters只有幾個默認的Converter佳吞,于是去看看我現(xiàn)在的Converter有沒有我想要的MappingJackson2HttpMessageConverter
注意:由于直接使用List<T> 接收會直接報415錯誤,所以后臺代碼和前臺代碼分別修改為如下棉安,即先只接收一個字符串:
//后臺:
@RequestMapping(value = "/testRequestBody")
@ResponseBody
public String testRequestBody(@RequestBody String userName){
System.out.println(userName);
return SUCCESS;
}
//.jsp:
$("button").click(function(){
$.ajax({
type: "POST",
url: 'springmvc/testRequestBody.html',
data : {"userName":"test"},
dataType:"json",
contentType : 'application/json',
success: function(data){
console.log(data);
},
error: function(res){
console.log(res);
console.log("fail");
}
});
});
打上斷點底扳,查看如下:
可以看到紅框中只有6個Converter,而且沒有我想要的MappingJackson2HttpMessageConverter贡耽,至此找到問題所在衷模。
二、解決問題
網上找到導入上述三個包即可加入MappingJackson2HttpMessageConverter菇爪,隨即嘗試算芯,
加入后再次debug查看:
可以看到我想要的MappingJackson2HttpMessageConverter已經加入了,
再次將代碼修改為List<T> 接收凳宙,查看:
有什么問題歡迎交流~~ (o^ _ ^o)