AngularJS- und Jersey REST DELETE-Vorgang schlägt mit 415 Statuscode fehl

8

Ich habe eine AngularJS-Webapplikation mit einer Jersey Backend-Anwendung.

Nun funktioniert alles mit ngResource, um auf die REST-Ressource von AngularJS zuzugreifen. Das einzige Problem ist mit der Option DELETE.

Ich habe den folgenden Code, um einen Kurs mit meiner ngResource zu löschen:

%Vor%

Im Backend (Jersey) habe ich folgenden Code:

%Vor%

Wenn ich versuche, ein Element zu löschen, wird die folgende URL von Angular aufgerufen:

%Vor%

Das ist in Ordnung (nach mir). Wenn ich diese URL von CURL aus anrufe, bekomme ich die ssystem.out vom Backend an die Konsole gesendet.

In der Client-App (AngularJS) erhalte ich die folgende Ausnahme in der Browser-Konsole:

%Vor%

Jemand eine Idee, was das Problem sein könnte? POST + GET funktionieren gut.

Ich habe folgende Anmerkungen / Kommentare:

%Vor%

@Produces ({MediaType.APPLICATION_JSON})

Vielen Dank im Voraus für Ihre Hilfe.

Grüßt Marc

BEARBEITEN:

Ich habe versucht, die Art des Zugriffs auf die REST-Dienste aus AngularJS durch $ http zu ersetzen.

Jetzt sieht mein Dienst wie folgt aus:

%Vor%

}]);

Das Ergebnis ist immer noch das gleiche. Die Anwendung ruft z. B.

auf %Vor%

und erhält ein

%Vor%

Wenn ich den gleichen DELETE-Aufruf bei Curl anrufe, funktioniert alles einwandfrei.

Danke für Ihre Hilfe Marc

    
mooonli 29.06.2013, 10:54
quelle

3 Antworten

11

Ich bin auch darauf gestoßen, das Problem ist eckig setzt immer den Content-Type-Header auf xml DELETE-Anfragen und Jersey wird einen Fehler Chuck, wie Sie angegeben haben, dass Ihre API JSON mit den Anmerkungen konsumiert / produziert.

Um es (von der Client-Seite) zu beheben, setzen Sie den Content-Type-Header, zB:

%Vor%

Aus Gründen, die ich nicht verstehe / weiß, wird angular den Content-Type-Header aus der Anfrage entfernen, wenn er keine Daten enthält. Dies würde Sinn machen, wenn die Browser (zumindest Chrome) nicht immer einen Inhaltstyp senden würden ... Wie auch immer, Sie müssen sich die Mühe machen, dies in der Winkelquelle zu finden:

%Vor%

und loswerden. Ich kenne keine Möglichkeit, dies zu tun, ohne die Quelle zu bearbeiten. Vielleicht weiß jemand mit einem besseren JS-Know-how, äh, wie.

Alternativ können Sie auf der Serverseite wie von Rob vorgeschlagen vorgehen und die Jersey-Konfiguration so ändern, dass MediaType.APPLICATION_XML

verwendet werden kann %Vor%     
paullth 04.07.2013 13:29
quelle
0

Ich hatte dasselbe Problem. Versuchen Sie, eine neue Instanz des Kursobjekts in Ihrer Löschmethode zurückzugeben.

%Vor%     
Philly guy 02.07.2013 18:02
quelle
0

Wenn Sie angularjs $ resource (anstelle von $ http) verwenden, ohne "Nutzlast" in der Anfrage, wird der Inhaltstyp als text / plain gesetzt.

Also IMHO ist es besser eine serverseitige Unterstützung. " Postel'sches Gesetz besagt, dass Sie in dem, was Sie akzeptieren, liberal sein sollten und in dem, was Sie senden, liberal sein sollten - Quelle "

%Vor%     
Fabio Bonfante 28.10.2013 09:46
quelle