2016-03-31 5 views
1

У меня есть JQuery Ajax вызов, как это:406 Ошибка при отправке JSON Спринг контроллер

  $.ajax({ 
      type: "post", 
      url: url, 
      data: JSON.stringify(formSubmit), 
      contentType: "application/json", 
      dataType: "json", 
      success: function(xhr,status) { 
       console.log("Return Data:"+xhr.responseText) 
      }); 

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

@RequestMapping(value = "/doIt", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") 
@ResponseBody 
public MyObject activityPerformed(HttpServletRequest request, HttpServletResponse response, @RequestBody String jsonData) { 
    logger.debug("JSON INPUT:"+jsonData); 
    MyObject o = new MyObject("STUFF"); 
    return o; 
} 

Это бросает ошибку 406. Я могу видеть в моем браузере, что у меня есть это в моих заголовках ответа:

Content-Type:"text/html;charset=utf-8" 

который я думал, что производит часть отображения должна быть исправлена.

Когда я удаляю «contentType» вызова ajax, я не получаю ошибку 406, но затем параметр jsonData в URLEncoded. Нет, я предполагаю, что могу сделать декодирование, но это, я думаю, не «правильно».

Как я могу отправить JSON без кодировки URL-адреса без содержимого contentType: «application/json» в вызове ajax?

ИЛИ как установить тип содержимого ответа контроллера?

+0

Вы проверили журнал безопасности сервера? Apache генерирует ошибку, когда запрос нарушает правила mod_security. Таким образом, это может быть не ваш запрос jsonData, вызывающий ошибку. – Dexter

+0

Я использую tomcat 8.0.30 – mmaceachran

+0

Другой человек с вашей настройкой и той же проблемой: http://stackoverflow.com/questions/7462202/spring-json-request-getting-406-not-acceptable. Я не уверен, что такое ваша настройка, но это может помочь вам найти источник ошибки, чтобы вы знали, какие детали предоставить. Они не используют одни и те же заголовки запросов, как вы, но ответы могут показать вам, в каком направлении идти. – Dexter

ответ

0

Весна является стороной, ответственной за отправку назад 406. The Spring reference documentation и JavaDoc помогут пролить свет на это.

Из справочной документации:

[касательно производит поле] Запрос будет соответствовать только если заголовок Accept запрос соответствует одному из этих значений.

Я ожидаю, что вы больше не получите 406 HTTP Status Code при добавлении надлежащего Accept request header (sec 14.1) (значение приложения/JSON; Charset = UTF-8) для вашего запроса Ajax.

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