2016-06-02 8 views
1

Ich möchte etwas JSON (das ich aus einer Datei lese) nachbilden und es als Ergebnis eines Spring Controllers zurückgeben.Gebe JSON aus der Datei (JSONObject) zurück in Spring Controller

Datei enthält natürlich innerhalb richtigen JSON-Datenformat, wie:

{"country":"","city":""...} 

Mein Controller wie folgt aussieht:

@RestController 
@RequestMapping("/test") 
public class TestController { 

    @Value("classpath:/META-INF/json/test.json") 
    private Resource testMockup; 

    @RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) 
    public @ResponseBody JSONObject getTest() throws IOException { 
     JSONObject jsonObject = new JSONObject(FileUtils.readFileToString(testMockup.getFile(), CharEncoding.UTF_8)); 
     return jsonObject; 
    } 
} 

Es mit dem Lesen der Datei selbst usw. jsonObject selbst kein Problem ist, ist korrekt von debugging PoV, aber ich bekomme HTTP-Status 406 aus dem Browser. Ich habe auch versucht, nur String zurückgeben (durch die Rückkehr jsonObject.toString()), anstatt JSONObject. Es verursacht jedoch Codierung Problem - so dass JSON aus dem Browser, ist nicht die JSON selbst (einige zusätzliche Schrägstriche, Anführungszeichen usw.).

Gibt es eine Möglichkeit, JSON aus Datei zurückzugeben?

Antwort

0

Das ist nicht gültig JSON. Wenn es kein Tippfehler, versuchen Sie Ihre Datei Neuformatierung aussehen

{"country":"","city":""} 

beachten Sie die Öffnungs Zitat um den Eigenschaftsnamen.

+0

Entschuldigung, ich habe es gerade behoben. Es war ein Problem nur hier, auf meine Eingabe für dieses Thema, nicht in Code. JSON sieht gut aus: {"country": "", "city": ""} So Root-Ursache dieses Problems ist noch unbekannt. Irgendwelche Ideen? – Namek

+0

Ersetzen Sie die leeren Zeichenfolgen durch Werte. –

+0

Es ist nicht das Problem mit dem JSON selbst ... Bereits versucht mit: {"country": "test1", "city": "test2"} – Namek

0

Haben Sie es mit Jackson versucht?

ObjectMapper mapper = new ObjectMapper(); 
Object json = mapper.readValue(input, Object.class); 
String s = mapper.writeValueAsString(json); 

Und vielleicht direkt in Antwort Körper schreiben? Jackson sollte sich um den JSon kümmern.

-1
@Controller 
public class TestController { 

    @RequestMapping(
     value = "/test", 
     method = RequestMethod.GET, 
     produces = MediaType.APPLICATION_JSON_VALUE 
    ) 

    String getTest() { 
     return "json/test.json"; 
    } 
} 

Das funktionierte für mich.

Pfad zu JSON-Datei: \src\main\resources\static\json\test.json

-1

Ich weiß, dass ich für diesen sehr spät gewesen, aber warum Sie nicht versuchen, die unter Umgehung.

@RequestMapping(method = RequestMethod.GET) 
public @ResponseBody String getTest() throws IOException { 
    JSONObject jsonObject = new JSONObject(FileUtils.readFileToString(testMockup.getFile(), CharEncoding.UTF_8)); 
    return jsonObject.toString(); 
} 
+0

Sie haben den gleichen Code gepostet, den OP bereits gepostet hat. Wo ist die Antwort? – burna

+0

Geändert: @ResponseBody String getTest() und jsonObject.toString(); –

+0

Hat das jemand versucht ?? –

Verwandte Themen