我正在尝试发布数据,当我点击保存时,我在浏览器中获得了415不支持的媒体类型。我想补充的另一个观察是,当我使用POSTMAN将数据发送到JSON格式的应用程序时,数据将持久存储在数据库中并在视图中正常运行。如果使用上述角度代码,问题仍然存在。
js code -
$scope.addUser = function addUser() {
var user={};
console.log("["+$scope.user.firstName+"]");
$http.post(urlBase + 'users/insert/',$scope.user)
.success(function(data) {
$scope.users = data;
$scope.user="";
$scope.toggle='!toggle';
});
};
控制器代码 -
@RequestMapping(value="/users/insert",method = RequestMethod.POST,headers="Accept=application/json")
public @ResponseBody List<User> addUser(@RequestBody User user) throws ParseException {
//get the values from user object and send it to impl class
}
答案 0 :(得分:1)
路径变量只能使用字符串值。你在路径中传递“user”,在Controller方法addUser()中,你期望的是User类型。由于这不是像Integer或Float这样的标准类型,在Spring中默认情况下String-Integer转换器已经可用,因此您需要提供从String到User的转换器。
您可以参考此link来创建和注册转换器。
正如@Shawn所建议的那样,当您在请求路径中发布序列化对象时,将其作为请求体传递是更清晰和更好的做法。您可以执行以下操作。
@RequestMapping(value="/users/insert",method = RequestMethod.POST,headers="Accept=application/json")
public List<User> addUser(@RequestBody User user) throws ParseException {
//get the values from user object and send it to impl class
}
并在您的ajax调用中将用户作为请求正文传递。将js代码更改为
//you need to add request headers
$http.post(urlBase + 'users/insert',JSON.stringify($scope.user)).success...
或
//with request headers
$http({
url: urlBase + 'users/insert',
method: "POST",
data: JSON.stringify($scope.user),
headers: {'Content-Type': 'application/json','Accept' : 'application/json'}
}).success(function(data) {
$scope.users = data;
$scope.user="";
$scope.toggle='!toggle';
});
};
添加这些请求标题Content-Type:application / json和Accept:application / json。
类似的问题发布在stackoverflow https://stackoverflow.com/a/11549679/5039001