Jersey バックエンド アプリケーションを使用した AngularJS Web アプリケーションがあります。
これで、ngResource を使用して AngularJS から REST リソースにアクセスできるようになりました。唯一の問題は、DELETE オプションにあります。
ngResource を使用してコースを削除する次のコードがあります。
Course.deleteCourse = function(course) {
course.$remove({
courseId:course.id
});
return course;
};
バックエンド (Jersey) には、次のコードがあります。
@DELETE
@Path("{id}")
public final void remove(@PathParam("id") final String id) {
System.out.println("DELETE ID = " + id);
}
アイテムを削除しようとすると、次の URL が Angular から呼び出されます。
DELETE http://localhost:8080/manager-api/courses/5
これでいいです(私の後)。この URL を CURL から呼び出すと、コンソールにポストされたバックエンドから ssystem.out が取得されます。
クライアント アプリ (AngularJS) では、ブラウザー コンソールで次の例外が発生します。
DELETE http://localhost:8080/manager-api/courses/5 415 (Unsupported Media Type)
誰が問題が何であるか考えていますか? POST + GET は正常に機能しています。
次の消費/生産アノテーションがあります。
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
よろしくお願いします。
マークに挨拶
編集:
AngularJS から REST サービスにアクセスする方法を $http に置き換えようとしました。
今私のサービスは以下のようになります:
MyApp.factory("Course", ["$http", function ($http) {
var courseBaseUrl = "/api/courses/";
return {
show: function show(courseId) {
return $http.get(courseBaseUrl + courseId);
},
list: function list() {
return $http.get(courseBaseUrl, {});
},
remove: function remove(courseId) {
return $http.delete(courseBaseUrl + courseId, {});
},
save: function save(course) {
return $http.post(courseBaseUrl, course, {});
}
};
}]);
結果はまだ同じです。アプリケーションは、例えば
DELETE http://localhost:8080/manager-api/courses/1
を受け取ります
DELETE http://localhost:8080/manager-api/courses/1 415 (Unsupported Media Type)
Curl で同じ DELETE 呼び出しを呼び出すと、すべて正常に動作します。
助けてくれてありがとう