Ich verwende die Apache HTTP Client-Bibliotheken und Jackson in meinem Client. Wenn ich JSON auf dem Server posten, erhalte ich den Fehler:
%Vor% Wenn ich keinen Header setze, bekomme ich invalid media type
, was Sinn macht.
Wenn ich curl und die gleichen Header verwende, akzeptiert der Server es, also denke ich, dass der Server in Ordnung ist (und nur zufällig, dass es auch Jackson benutzt)
Dies ist das Dokument; Ich habe es hart als Java-Literal mit nur 8-Bit-Zeichen codiert, um jeden anderen Ort zu vermeiden, an dem Mangeln passieren kann.
%Vor%Hier ist der Code, den ich benutzt habe, und Kommentare zu den verschiedenen Versuchen:
%Vor%Andere seltsame Dinge, die ich bemerkt habe:
Wirklich aus Ideen, und wie gesagt, es funktioniert mit curl, also denke ich, der Server ist in Ordnung.
Bearbeiten:
curl funktioniert beim Posten auf dem Server, aber ich kann den Servercode nicht teilen. Es wurde darauf hingewiesen, dass, da curl nicht in Java geschrieben ist und sich daher möglicherweise anders verhält und daher der Servercode immer noch verdächtig sein könnte.
Als weiteren Test verwendet der folgende Code NICHT die Apache-httpclient-Bibliothek und funktioniert bei der Veröffentlichung auf dem Server. Dies beweist, dass der Server in Ordnung ist und es immer noch nicht stimmt, wie ich die Apache-Bibliothek auf der Client-Seite verwende (oder vielleicht ist sie fehlerhaft).
Nicht-apache-httpclient-Code, der funktioniert:
%Vor% Es sieht so aus, als ob das Problem darin besteht, wie der ContentType
-Parameter für den StringEntity
-Konstruktor des HttpClients erstellt wird.
Die Verwendung der ContentType.APPLICATION_JSON
-Konstante als Parameter (was dem "mime-Typ" application / json; charset = utf-8 "entspricht) sorgt dafür, dass alles funktioniert.
Hier ist ein Beispiel, das die JSON-Zeichenfolge an einen öffentlichen http-Dienst sendet, der die Anfrage an den Client zurückgibt:
%Vor%Ausgabe:
%Vor%