2015-11-11 3 views
0

Я учусь использовать Spring, используя Spring-boot.Как вернуть JSONObject весной без ошибки 406

Я хочу вернуть JSONObject от контроллера, но он всегда возвращает 406.

Я импортировал org.json.JSONObject; для создания объекта JSONObject.

Код:

@RequestMapping(value = "/json", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) 
@ResponseBody 
public Object testJsonCall(){ 
    JSONObject reply = new JSONObject(); 
    reply.put("status","success"); 
    reply.put("foo", "bar"); 
    return reply; 
} 

Спасибо за помощь.

+1

Подходит ли клиент к JSON? Заголовок Accept может указывать, что нет, поэтому Spring возвращает HTTP 406, так как он не может выполнить запрос с помощью содержимого json. ИЛИ, вам необходимо, чтобы org.codehaus.jackson поддерживал возвращаемые значения не-String. Нам нужна дополнительная информация о вашем проекте. – Koshinae

+0

В запросе клиента я добавил заголовок Content-Type для приложения/json. И я также включил jackson-core-asl и jackson-mapper-asl в зависимости. –

ответ

0

Вам необходимо добавить следующие jars в pom.xml.

<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.4.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.4.1.1</version> </dependency> 

<dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.13</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> 
+0

Я уже пытался добавить их, но это все равно. –

1

Спасибо всем. Теперь я нашел решение.

Первоначально, я попробовал добавить jackson-core и jackson-core-asl, но он не заставил его работать. Wierdly, я только что добавил toString к возвращению, он работает!

@RequestMapping(value = "/json", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) 
@ResponseBody 
public Object testJsonCall(){ 
    JSONObject reply = new JSONObject(); 
    reply.put("status","success"); 
    reply.put("foo", "bar"); 
    return reply.toString(); //here I added toString() 
} 
+0

Как общая рекомендация, старайтесь не использовать JSONObject непосредственно при работе с Spring и вместо этого использовать сопоставление объектов Jackson, встроенное в Spring Boot. В этом случае вы можете создать класс 'Reply' с полями' status' и 'foo'. Затем вы можете просто «вернуть новый ответ» («success», «bar»); »и обновить свою сигнатуру метода до« public Reply testJsonCall() ». Spring Boot использует Jackson для автоматического преобразования этого в JSON в ответ. – nerdherd

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