[英]AngularJS $resource save() causes HTTP Error 415 (Unsupported Media Type)
我正在使用Angular 1.2-RC2(也尝试过1.0.8和1.1.x)和ngResource模块。 后端是Spring WebMVC应用程序。
angular.module("dox", ['ngResource'])
.controller('SettingsController', function ($scope, Settings) {
$scope.settings = Settings.query();
$scope.save = function () {
Settings.save();
};
})
.factory('Settings', function ($resource) {
return $resource('/api/v1/settings/:settingId', {settingId: '@id'}, {
'save': {
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
}
});
});
每当调用Settings类上的save()方法时,前端都会收到HTTP 415(不支持的媒体类型)。 原因是AngularJS使用以下内容类型发送POST请求:
Content type: text/plain;charset=UTF-8
但是后端期望
Content type: application/json;charset=UTF-8
根据API文档 ,应该可以覆盖标头,但是以某种方式忽略了我的设置。 我似乎这是一个常见问题,作为一种解决方法 ,有许多建议使用$ http.post代替$ resource。
您能给我些提示如何使用$ resource服务解决此内容类型问题吗?
请在此处找到后端控制器代码。
首先,您将重写内置的$save
方法,因此您可以省略save:
部分(请参阅源代码 )。 如果您确实定义了其他非内置的HTTP方法,则可以像这样更新$httpProvider
(这是添加patch
方法):
.config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.headers.patch = {
'Content-Type': 'application/json;charset=utf-8'
}
}]);
凯文·斯通将我推向正确的方向。 谢谢!
由于查询()返回一个数组,并保存()是指在同一时间,我不得不重新实现节约()的东西只保存一个数组的项目不同 。
$scope.save = function () {
angular.forEach($scope.settings, function (value, key) {
value.$save();
});
};
做完了! 再次感谢您的提示和帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.