2016-06-02 2 views
1

Я хотел бы объединить некоторые JSON (который я читаю из файла) и вернуть его в результате некоторого Spring Controller.Возвращение издевается над JSON из файла (JSONObject) в контроллере Spring

Файл содержит конечно правильный формат данных JSON внутри, как:

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

Мой контроллер выглядит следующим образом:

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

Там нет проблемы с чтением самого файла и т.д. jsonObject сам, правильно от debbuging PoV, однако я получаю HTTP-статус 406 из браузера. Я попробовал также просто вернуть String (возвращая jsonObject.toString()), а не JSONObject. Однако это вызывает проблему с кодировкой - так что JSON из браузера не является самой JSON (некоторые дополнительные косые черты, кавычки и т. Д.).

Есть ли способ, чтобы вернуть JSON из файла?

ответ

0

Это недействительно JSON. Если это не опечатка, попробуйте переформатировать ваш файл, чтобы он выглядел как

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

Обратите внимание на открытую цитату вокруг названия свойства.

+0

Извините, я только что исправил это. Это была проблема только здесь, на мой вклад в эту тему, а не в код. JSON выглядит хорошо: {"country": "", "city": ""} Так что коренная причина этой проблемы пока неизвестна. Любые идеи? – Namek

+0

Попробуйте заменить пустые строки на значения. –

+0

Это не проблема с самим JSON ... Уже пробовался с: {"country": "test1", "city": "test2"} – Namek

0

Вы пробовали с джексоном?

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

И, возможно, написать его прямо к телу реакции? Джексон должен позаботиться о json.

-1
@Controller 
public class TestController { 

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

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

Это сработало для меня.

Путь к файлу JSON: \src\main\resources\static\json\test.json

-1

Я знаю, что я был очень поздно для этого, но почему бы вам не попробовать ниже обходной путь.

@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

Вы отправили тот же код, что и OP, уже опубликованный. Где ответ? – burna

+0

Изменено: @ResponseBody String getTest() и jsonObject.toString(); –

+0

Кто-нибудь попробовал это? –

Смежные вопросы