Tôi có một ứng dụng web AngularJS với một ứng dụng Backend Jersey.AngularJS và Jersey REST DELETE hoạt động thất bại với 415 Mã trạng thái
Bây giờ mọi thứ đều hoạt động tốt khi sử dụng ngResource để truy cập tài nguyên REST khỏi AngularJS. Vấn đề duy nhất là với tùy chọn DELETE.
Tôi có đoạn code sau để xóa một khóa học sử dụng ngResource tôi:
Course.deleteCourse = function(course) {
course.$remove({
courseId:course.id
});
return course;
};
Trong backend (Jersey) Tôi có đoạn mã sau:
@DELETE
@Path("{id}")
public final void remove(@PathParam("id") final String id) {
System.out.println("DELETE ID = " + id);
}
Nếu tôi cố gắng xóa một mục url sau đây được gọi từ Angular:
DELETE http://localhost:8080/manager-api/courses/5
Điều này là tốt (sau tôi). Nếu tôi gọi url này từ CURL, tôi nhận được ssystem.out từ Backend được đăng lên bàn điều khiển.
Trong client-ứng dụng (AngularJS) tôi nhận được ngoại lệ sau trên trình duyệt giao diện điều khiển:
DELETE http://localhost:8080/manager-api/courses/5 415 (Unsupported Media Type)
Bất cứ một ý tưởng những gì các vấn đề có thể được? POST + GET đang hoạt động tốt.
Tôi đã sau tiêu thụ/sản xuất chú thích:
@Consumes({ MediaType.APPLICATION_JSON })
@Produces ({MediaType.APPLICATION_JSON})
Cảm ơn trước sự giúp đỡ của bạn.
Greets Marc
EDIT:
Tôi đã cố gắng để thay thế cho cách truy cập vào các dịch vụ REST ra khỏi AngularJS với $ http.
Bây giờ dịch vụ của tôi trông như sau:
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, {});
}
};
}]);
Kết quả vẫn như cũ. Ứng dụng gọi ví dụ
DELETE http://localhost:8080/manager-api/courses/1
và nhận được một
DELETE http://localhost:8080/manager-api/courses/1 415 (Unsupported Media Type)
Nếu tôi gọi là cuộc gọi DELETE cùng trên Curl, mọi thứ đều hoạt động tốt.
Nhờ sự giúp đỡ của bạn Marc
Một lựa chọn khác là thay đổi bên JAX-RS Jersey cho phép tiêu thụ MediaType.APPLICATION_XML ... @Consumes ({MediaType.APPLICATION_JSON,, MediaType.APPLICATION_XML}). –
điểm tốt, được thêm vào để trả lời – paullth
Vị trí đặt ".config (function ($ httpProvider) ..."? –