Ho un'applicazione Web AngularJS con un'applicazione di backend in Jersey.AngularJS e Jersey REST DELETE operazione non riuscita con 415 Codice di stato
Ora tutto funziona correttamente utilizzando ngResource per accedere alla risorsa REST da AngularJS. L'unico problema è con l'opzione DELETE.
Ho il seguente codice per eliminare un corso usando il mio ngResource:
Course.deleteCourse = function(course) {
course.$remove({
courseId:course.id
});
return course;
};
Nel backend (Jersey) ho il seguente codice:
@DELETE
@Path("{id}")
public final void remove(@PathParam("id") final String id) {
System.out.println("DELETE ID = " + id);
}
Se cerco di eliminare un elemento il seguente url viene chiamato da Angular:
DELETE http://localhost:8080/manager-api/courses/5
Questo va bene (dopo di me). Se chiamo questo URL da CURL, ottengo ssystem.out dal backend pubblicato sulla console.
Nel client-app (AngularJS) ottengo la seguente eccezione sulla console del browser:
DELETE http://localhost:8080/manager-api/courses/5 415 (Unsupported Media Type)
Chiunque un'idea di cosa il problema potrebbe essere? POST + GET funzionano bene.
Ho il seguente consumano/producono annotazioni:
@Consumes({ MediaType.APPLICATION_JSON })
@Produces ({} MediaType.APPLICATION_JSON)
Grazie in anticipo per il vostro aiuto.
saluta Marc
EDIT:
ho cercato di sostituire il modo di accedere ai servizi REST di AngularJS con $ http.
Ora il mio servizio appare come di seguito:
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, {});
}
};
}]);
Il risultato è sempre lo stesso. L'applicazione chiama per esempio
DELETE http://localhost:8080/manager-api/courses/1
e riceve un
DELETE http://localhost:8080/manager-api/courses/1 415 (Unsupported Media Type)
Se io chiamo la stessa chiamata CANC sulla Curl, tutto funziona bene.
Grazie per il vostro aiuto Marc
Un'altra opzione è quella di cambiare il lato JAX-RS Jersey per consentire consumare MediaType.APPLICATION_XML ... @Consumi ({MediaType.APPLICATION_JSON,, MediaType.APPLICATION_XML}). –
buon punto, aggiunto alla risposta – paullth
Dove mettere ".config (funzione ($ httpProvider) ..."? –