/ / Powrót wyśmiewany JSON z pliku (JSONObject) w Spring Controller - java, json, spring, controller, jsonobject

Zwraca wyszydzony JSON z pliku (JSONObject) w Spring Controller - java, json, spring, controller, jsonobject

Chciałbym wykpić trochę JSON (że czytam z pliku) i zwrócić go w wyniku jakiegoś kontrolera Spring.

Plik zawiera oczywiście poprawny format danych JSON, np .:

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

Mój kontroler wygląda następująco:

@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;
}
}

Nie ma problemu z odczytywaniem samego pliku itp. jsonObject samo w sobie jest poprawne od debugowania PoV, jednak dostaję Status HTTP 406 z przeglądarki. Próbowałem też tylko zwrócić String (przez powrót jsonObject.toString()), zamiast JSONObject. Powoduje to jednak problemy z kodowaniem - dlatego JSON z przeglądarki nie jest sam JSON (niektóre dodatkowe ukośniki, cudzysłowy itp.).

Czy jest jakiś sposób, aby zwrócić JSON z pliku?

Odpowiedzi:

1 dla odpowiedzi № 1
@Controller
public class TestController {

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

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

To działało dla mnie.

Ścieżka do pliku JSON: srcmainresourcesstaticjsontest.json


0 dla odpowiedzi nr 2

To nie jest poprawny JSON. Jeśli nie jest to literówka, spróbuj sformatować plik tak, aby wyglądał

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

Zwróć uwagę na cytat otwierający wokół nazwy nieruchomości.


0 dla odpowiedzi № 3

Próbowałeś z Jacksonem?

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

A może piszesz to prosto do odpowiedzi? Jackson powinien zająć się Jsonem.


-1 dla odpowiedzi № 4

Wiem, że się spóźniłem, ale dlaczego nie wypróbujesz poniższego obejścia.

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