我发送了一个json对象列表,并尝试在Spring控制器中反序列化它。但是我一直得到“错误请求”的错误并将结果转换为状态代码415.但是,我的json数组是有效的。
json是 -
{ “用户”:[ { “userName”:“john”, “email”:“john@gmail.com”, “user_id”:“u223344” }, { “userName”:“史密斯”, “email”:“smith@gmail.com”, “user_id”:“u223345” } ] }
Ajax调用如下 -
$.ajax({
url: $("#addNewUser").attr("action"),
data: JSON.stringify({users : dataToSend}),
dataType: 'json',
type: "POST",
beforeSend: function(xhr) {
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json");
},
success: function(data){
alert('success= ' + data);
},
error:function(data,status,er) {
alert("error: "+ data.responseText +" status: "+status+" er:"+er);
}
});
包装类如下。 User和UserWrapper类 -
public class User {
private String email;
private String userName;
private String user_id;
//getters and setters
}
public class UserWrapper {
private List<User> userList;
//getter and setter
}
最后,弹簧MVC控制器是 -
@RequestMapping(value="/user/add", method=RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public void createTeamMember(@RequestBody UserWrapper userWrapper) {
try{
for(User user : userWrapper.getUserList()){
System.out.println(user.getEmail());
}
}catch(Exception ex){
ex.printStackTrace();
}
}
我在pom.xml中添加了对jackson-core和jackson-mapper的依赖。我使用的是Spring 4.0.3。任何帮助表示赞赏。
答案 0 :(得分:2)
正如@shazin所说,你很可能在你的问题上发布了错误的方法,如果没有,只需做出他建议的改变。
您需要另一个修复,即将usersList
属性从UserWrapper
重命名为users
,以便它与正在发送的JSON属性匹配。
我们已经修复了这些问题,因为您的请求没问题,所以不应该有其他问题。
答案 1 :(得分:1)
我认为您需要将@RequestBody
POJO更改为UserWrapper
@RequestMapping(value="/task/add", method=RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public void createTeamMember(@RequestBody UserWrapper userWrapper) {
// Code to create members
}
答案 2 :(得分:0)
我不会怀疑服务器端绑定错误,因为您收到415 - 不支持的媒体类型错误。您正在控制器上设置正确的媒体类型,因此服务器端看起来很好。
在客户端,请确保使用jquery 1.5+以确保调用beforeSend()方法。
更容易找到内容类型,
$.ajax({
url:api,
....
contentType: "application/json"
});
请检查来自浏览器的网络请求,并确保在标题中设置内容类型。
如果您收到400-Bad Request,那么您可以开始查看反序列化问题。