Ich benutze den Jersey Client um auf einen Webservice zuzugreifen, so:
response =
r.accept(MediaType.TEXT_PLAIN_TYPE).header("content-length", 0).post(String.class);
wo r ist eine WebResource
Der Webservice gibt jedoch 411 zurück - Content-Length fehlt.
Mit tcpdump fand ich heraus, dass ich benutzerdefinierte Header angeben kann, d. h. .header("myheader", 0)
funktioniert gut.
So scheint es, dass Jersey aus einigen Gründen den Content-Length-Header löscht.
Hat jemand Ideen?
Die Inhaltslänge eines Anrufs wird von Jersey Client berechnet, sie kann nicht festgelegt werden. Paul Sandoz - ein bekannter Commiter des Projekts - hat geantwortet: eine ähnliche Frage :
F: Ich denke, dass "Content-Length" Header wird nicht automatisch gesetzt.
A: Die Jersey Laufzeit [...] Bestimmen Sie die Länge des Inhalts.
Wenn Sie weitere Informationen benötigen, erläutern Sie bitte, welches Ergebnis Sie erwartet haben, wenn Sie eine Zeichenfolge an eine Ressource mit einer leeren Größe senden.
Ich hatte tatsächlich die Anforderung, eine leere POST-Anfrage für einen Restful-Webservice zu verwenden.
Wenn Sie eine leere Zeichenfolge als zweiten Parameter der Post-Methode angeben, erstellt Jersey den Content-Length-Header mit dem Wert 0.
z.B.
response = r.accept(MediaType.TEXT_PLAIN_TYPE).post(String.class, "");