Ich benutze das jackson-Framework für das Marshaling und das Unmarshalling von Daten zwischen JSON und Java. Alles funktioniert gut, solange die Eingabe keine Zeichen enthält wie:
Für Eingabedaten habe ich versucht:
%Vor%sowie:
%Vor%und die ganze Zeit bekomme ich die gleiche Ausnahme.
Das Mapping von JSON-Daten zum Java-Objekt erfolgt über:
%Vor%Ich führe auch eine JSON-Datenvalidierung durch, die wie erwartet funktioniert, auch mit den obigen Zeichen.
Wie sollten solche Daten behandelt werden?
AKTUALISIEREN
Dies sind die wichtigen Teile der Klasse MessageBodyReader
Die JSON-Spezifikation besagt, dass nur gültige Kodierungen UTF-8, UTF-16 und UTF-32 sind. Keine anderen Kodierungen (wie Latin-1) können verwendet werden. Ihre stringToStream-Implementierung legt die Codierung nicht explizit fest, sodass der Systemstandard verwendet wird. So hast du einen non-utf-Stream bekommen. Im nächsten Schritt versucht Jakson, den Stream mit einer der UTF-Kodierungen zu analysieren (er hat einen eingebauten Erkennungsalgorithmus) und schlägt fehl. Versuchen Sie, eine explizite Codierung festzulegen:
%Vor% Sie haben bereits eine Antwort erhalten, aber eine offensichtliche Frage ist hier: Warum konvertieren Sie von String
in einen Stream? Das ist unnötig und verschwenderisch - also übergeben Sie einfach die Saite wie sie ist. Dies wird auch das Problem beseitigen; Zeichenfolgen haben keine Codierung per se (das heißt: es gibt nur eine einzige speicherinterne Darstellung und es sind keine Konvertierungen erforderlich).