Spring MVC не возвращает JSON содержание - ошибка 406 - PullRequest
26 голосов
/ 01 ноября 2010

Я использую Spring MVC с JSON, как указано в Статья Ajax Simplification Spring 3.0 .

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

Я продолжаю получать следующую ошибку: (406) Ресурс, указанный в этом запросе, способен генерировать ответы только с характеристиками, не приемлемыми в соответствии с заголовком запроса «принять» ().

У меня есть файл appconfig.xml, как требуется.

Приложение-config.xml

    <context:component-scan base-package="org.ajaxjavadojo" />

    <!-- Configures Spring MVC -->
    <import resource="mvc-config.xml" />

MVC-config.xml

<mvc:annotation-driven />

<!-- Forwards requests to the "/" resource to the "index" view -->
<mvc:view-controller path="/" view-name="index"/>


<!-- Resolves view names to protected .jsp resources within the /WEB-INF/views directory -->
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
  <entry key="html" value="text/html"/>
  <entry key="json" value="application/json"/>
</map>
</property>
<property name="viewResolvers">
<list>
  <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
  </bean>
</list>
</property>

</bean>

Это то, что у меня есть для моего контроллера

@Controller
@RequestMapping (value = "/convert")
public class ConversionController {

  @RequestMapping(method=RequestMethod.GET)
  public String getConversionForm(){
    return "convertView";
  }

  @RequestMapping(value = "/working", headers="Accept=application/json", method=RequestMethod.GET)
  public @ResponseBody Conversion getConversion(){
    Conversion d = new Conversion("d");
    return d;
  }
}

JSP JQuery Call

  function convertToDecimal(){
    $.getJSON("convert/working", {key: "r"}, function(aConversion){
      alert("it worked.");
      $('#decimal').val(aConversion.input);
    });
  }

Буду очень признателен за любую информацию по этому вопросу. Спасибо

Ответы [ 14 ]

1 голос
/ 01 июня 2013

проблема не связана с jquery. даже ошибка говорит, что это проблема на стороне сервера. пожалуйста, убедитесь, что следующие 2 банки присутствуют в пути к классам: -

ДЖЕКСОН-ядро-ASL-1.9.X.jar ДЖЕКСОН-картограф-ASL-1.9.X.jar

0 голосов
/ 07 февраля 2014

Используя jQuery, вы можете установить для contentType желаемый (application / json; charset = UTF-8 'здесь) и установить тот же заголовок на стороне сервера.

ПОМНИТЕ, ЧТОБЫ ОЧИСТИТЬ КЭШ во время тестирования.

0 голосов
/ 07 декабря 2013

Вместо @RequestMapping(...headers="Accept=application/json"...) используйте @RequestMapping(... , produces = "application/json")

0 голосов
/ 31 августа 2011

Как говорит axtavt, mvc: annotation-driven-jacks и JSON Mapper - все, что вам нужно.Я последовал этому и заставил мое приложение возвращать строки JSON и XML из одного и того же метода без изменения какого-либо кода при условии, что в объекте, который вы возвращаете из контроллера, есть @XmlRootElement и @XmlElement.Разница была в параметре accept, переданном в запросе или заголовке.Чтобы вернуть xml, любой нормальный вызов из браузера сделает это, в противном случае передайте accept как application / xml.Если вы хотите вернуть JSON, используйте 'application / json' в параметре accept в запросе.

Если вы используете Firefox, вы можете использовать tamperdata и изменить этот параметр

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...