Gibt JSON für ResponseEntityString zurück

9

Ich habe eine Methode in meinem Controller, die einen String in JSON zurückgeben soll. Es gibt JSON für nicht primitive Typen zurück:

%Vor%

Die Curl-Antwort lautet:

%Vor%     
Sydney 22.08.2013, 15:53
quelle

2 Antworten

7
%Vor%     
NimChimpsky 22.08.2013, 16:21
quelle
11

Die Wurzel des Problems ist das Spring (über ResponseEntity , RestController und / oder ResponseBody ) verwendet den Inhalt der Zeichenfolge als rohen Antwortwert, anstatt die Zeichenfolge als zu codierenden JSON-Wert zu behandeln. Dies gilt auch, wenn die Controller-Methode produces = MediaType.APPLICATION_JSON_VALUE verwendet, wie in der Frage hier.

Es ist im Wesentlichen wie der Unterschied zwischen den folgenden:

%Vor%

Die erste Ausgabe kann nicht als JSON geparst werden, aber die zweite Ausgabe kann.

Etwas wie '"'+myString+'"' ist jedoch wahrscheinlich keine gute Idee, da das korrekte Entkommen von Anführungszeichen innerhalb der Zeichenfolge nicht behandelt wird und kein gültiger JSON für eine solche Zeichenfolge erzeugt wird.

Eine Möglichkeit, dies zu umgehen, wäre, Ihre Zeichenfolge in ein Objekt oder eine Liste einzubetten, so dass Sie keine unformatierte Zeichenfolge an Spring übergeben. Das ändert jedoch das Format Ihrer Ausgabe, und wirklich gibt es keinen guten Grund, nicht in der Lage zu sein, eine richtig codierte JSON-Zeichenfolge zurückzugeben, wenn Sie das möchten. Wenn es das ist, was Sie wollen, ist der beste Weg, um damit umzugehen, ein JSON-Formatierer wie Json oder Google Gson . So könnte es bei Gson aussehen:

%Vor%     
zacronos 16.03.2017 14:32
quelle

Tags und Links