Die Wurzel des Problems ist, dass Spring (via ResponseEntity, RestController und/oder ResponseBody) wird Verwenden Sie den Inhalt der Zeichenfolge als den unbearbeiteten Antwortwert, anstatt die Zeichenfolge als JSON-Wert zu behandeln, der codiert werden soll. Dies gilt auch, wenn die Controller-Methode produces = MediaType.APPLICATION_JSON_VALUE
verwendet, wie in der Frage hier.
Es ist im Wesentlichen wie die Differenz zwischen dem folgenden:
// yields: This is a String
System.out.println("This is a String");
// yields: "This is a String"
System.out.println("\"This is a String\"");
Der erste Ausgang nicht als JSON syntaktisch analysiert werden, aber die zweite Ausgabe kann.
Etwas wie '"'+myString+'"'
ist jedoch wahrscheinlich keine gute Idee, da das korrekte Entkommen von doppelten Anführungszeichen in 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 unbearbeitete 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:
import com.google.gson.Gson;
@RestController
public class MyController
private static final Gson gson = new Gson();
@RequestMapping(value = "so", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
ResponseEntity<String> so() {
return ResponseEntity.ok(gson.toJson("This is a String"));
}
}
Es funktioniert auch nicht. Alles was ich überprüfen muss? – Sydney
das funktioniert definitiv ... was bekommen Sie als Antwort und was genau benötigen Sie? – NimChimpsky
Ich bekomme 'This is a String' und wenn ich ein Objekt zurückgebe, bekomme ich' {"repeatSecond": 15} '. Also für primitive scheint es, dass ich keine JSON-Zeichenfolge bekomme, aber für Objekt, das ich mache. – Sydney