У меня есть служба отдыха Spring, использующая Spring 3.1.0.RELEASE. Вот соответствующий код для рассматриваемого сервисного звонка:
@RequestMapping(value="/{var1}", method=RequestMethod.GET, produces="application/json")
@ResponseBody
public String getSomeStuff(@PathVariable final String var1) {
return myJsonString;
}
Если я вызову это с помощью следующей команды curl, она с радостью вернет мне мою строку json с типом содержимого application / xml, тогда как я ожидаю 406 на основе документов Spring 3.1:
curl -v -H "Accept: application/xml" http://localhost:8080/MyServiceSite/myvalue
В моем приложении нет дополнительной настройки для этой службы (без сериализации), я возвращаю необработанный JSON без пост-обработки для настроенной службы. Я уверен, что что-то пропустил, кто-нибудь может указать на то, что я мог пропустить?
Редактировать: Вот документация , на которую я смотрел, пытаясь заставить это работать. В частности, раздел 16.3.2.5. Мой код очень похож, за исключением того, что его код выглядит так, будто он предполагает настройку конфигурации, позволяющую Spring обрабатывать сериализацию. Возможно, продукция не работает при обходе сериализации Spring?
Редактировать: я изменил свое ожидание для кода ответа. 415 будет означать, что я отправляю неправильное содержимое в теле запроса, тогда как 406 подходит для наличия заголовка accept, который не соответствует типу содержимого сервера.
В любом случае, я изменил этот метод, возвращаю Map и добавляю конфигурацию для сериализации в json, и теперь, если я отправляю неверный тип контента с клиента, я получаю правильный ответ 406. Кажется, что, возможно, настройка «производит» игнорируется, когда выходные данные метода не сериализуются.