2017-03-21 11 views
0

ich mein Frühling REST-Service wie folgt geschrieben haben:JSON-Antwort von Spring REST hat Backslash Zeichen

@RequestMapping(value = "/{name}", method = RequestMethod.GET, 
     consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) 
public ResponseEntity<Map<String, Object>> 
      getStudentByName(@PathVariable("name") String name) { 
    Map<String, Object> map = null; 
    try { 
     map = new HashMap<String, Object>(); 
     map.put("name", "Tom Joe); 
     map.put("id", "t100"); 
     map.put("dept", "nuclear energy");   
    } catch (Exception e) { 
     LOG.error("Error finding with name " + name, e); 
    } 

    return new ResponseEntity<Map<String, Object>>(map, HttpStatus.OK); 
} 

ich wie dies die Ausgabe auf der Client-Seite, die im Grunde eine einzelne Saite ist:

"{\"name\":\"Tom Joe\",\"id\":\"100\",\"dept\":\"nuclear energy\"}" 

Aber meine gewünschte Ausgabe ist:

{ 
"name":"Tom Joe", 
"id":"t100", 
"dept":"nuclear energy" 
} 

mir jemand sagen kann, wie Schrägstriche zu vermeiden Senden und stattdessen schickst du json? Kann ich das nicht für die Rückgabe einer Karte tun?

+0

Ich würde versuchen, produziert = MediaType.APPLICATION_JSON statt, der MIME-Typ APPLICATION_JSON_VALUE gibt Ihnen eine String-Konvertierung von diesem. – Tim

+0

@Tim Das würde nicht kompilieren. 'MediaType.APPLICATION_JSON' ist ein' MediaType'-Wert. 'products' erwartet' String [] '. –

+0

Ich bin mir nicht sicher, warum meine Antwort unten abgelehnt wurde, aber der Code scheint gut zu funktionieren. Ich würde prüfen, welchen Client du verwendest. Wenn es ein Java-Client ist, fügt er der Antwort möglicherweise die Escape-Zeichen hinzu. – Pete

Antwort

-1

habe ich versucht, den Code in meiner Anwendung, und es schien wie erwartet zu funktionieren:

@RestController 
public class TestController { 

... 

@RequestMapping(value = "/{name}", method = RequestMethod.GET, 
     consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) 
public ResponseEntity<Map<String, Object>> getStudentByName(@PathVariable("name") String name) { 
    Map<String, Object> map = null; 
    try { 
     map = new HashMap<String, Object>(); 
     map.put("name", "Tom Joe"); 
     map.put("id", "t100"); 
     map.put("dept", "nuclear energy"); 
    } catch (Exception e) { 
     LOGGER.error("Error finding with name " + name, e); 
    } 

    return new ResponseEntity<Map<String, Object>>(map, HttpStatus.OK); 
} 
} 

gibt die folgende Ausgabe:

{ "name": "Tom Joe", "id ":" t100 "," dept ":" Kernenergie "}

Welchen Client verwenden Sie? Ich verwende den Advanced Rest-Client in Chrome.

+0

Überraschend. Ich benutze meinen eigenen Java-Client zum Testen. Im Grunde erstellen Sie HttpURLConnection und erhalten die Antwort mit ihrem Inputstream. Ich bekomme die Antwort, aber es ist eine einzige Zeichenfolge anstelle von guten json. – sburnwal

+0

haben Sie es in einem Browser versucht? – Pete

+0

Sie haben Recht. Der Dienst gibt tatsächlich den richtigen JSON zurück, aber Gson.toJson (Antwort) fügt diese Backslashes hinzu. Entschuldigung für den Beitrag! – sburnwal