私は 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 ドキュメントによると、ヘッダーをオーバーライドできるはずですが、私の設定はどういうわけか無視されます。これは一般的な問題のようで、回避策として$resource の代わりに $http.post を使用することをお勧めします。
$resource サービスを使用してこのコンテンツ タイプの問題を解決する方法を教えてください。
バックエンド コントローラーのコードはこちらで確認してください。