0

私は 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 サービスを使用してこのコンテンツ タイプの問題を解決する方法を教えてください。

バックエンド コントローラーのコードはこちらで確認してください。

4

2 に答える 2

0

ケビン・ストーンは私を正しい方向へと後押ししてくれました。ありがとうございました!

query() は配列を返し、save() はその配列の 1 つの項目のみを同時に保存することを意図しているため、save() をの方法で再実装する必要がありました。

$scope.save = function () {    
   angular.forEach($scope.settings, function (value, key) {                    
      value.$save();
   });
};

終わり!再びあなたのヒントと助けに感謝します

于 2013-10-08T15:13:41.550 に答える