Понимание Spring mvc производит/потребляет и Джексон

Я запускаю приложение Maven Spring MVC 3 со встроенным причалом с конфигурацией ниже:

    <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
        <version>6.1.14</version>
        <configuration>
            <scanIntervalSeconds>10</scanIntervalSeconds>
            <testClassesDirectory>/Users/mydownloads/Downloads/jackson-all-1.8.10.jar</testClassesDirectory>
            <useTestClasspath>true</useTestClasspath>
        </configuration>
    </plugin> 

Как видно выше, у меня есть jackson-all-1.8.10 jar в тестовом пути к классам.

У меня есть сопоставления, как показано ниже, которые отлично работают, когда я создаю json из своего контроллера:

@RequestMapping(value="/getSomething",produces="application/json",method=RequestMethod.GET)

Однако, когда я пытаюсь получить отображение POST, я получаю сообщение об ошибке: 415: Unsupported Media Type

аннотация, которую я использую для POST:

@RequestMapping(value="/postSomething", consumes="application/json", method= RequestMethod.POST)

Как я могу исправить это, чтобы банка jackson, находящаяся в пути к классам, позаботилась о типе носителя?

На клиенте, когда я делаю запрос POST данных, запрос имеет следующие заголовки:

Request URL:http://localhost:8080/myapp/postSomething
Request Method:POST
Status Code:415 Unsupported Media Type
**Request Headersview source**
  Accept:*/*
  Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
  Accept-Encoding:gzip,deflate,sdch
  Accept-Language:en-US,en;q=0.8
  Connection:keep-alive
  Content-Length:23
  Content-Type:application/x-www-form-urlencoded
  Cookie:JSESSIONID=1f0mox1qw67zl
  Host:localhost:8080
  Origin:http://localhost:8080
  Referer:http://localhost:8080/myapp/
  X-Requested-With:XMLHttpRequest

У меня есть datatype: 'json' на jQuery


person birdy    schedule 22.10.2012    source источник
comment
проверьте, установлено ли для типа содержимого запроса правильное значение (application/json)   -  person soulcheck    schedule 22.10.2012
comment
У меня есть datatype: 'json' на стороне jquery. Я также разместил заголовки запроса.   -  person birdy    schedule 22.10.2012


Ответы (1)


Вы неправильно задали запрос Content-Type.

Как вы можете видеть в опубликованных вами заголовках, значение заголовка Content-Type равно application/x-www-form-urlencoded, что является значением по умолчанию для jquery.

Используйте атрибут contentType: 'application/json' в вызове jquery ajax.

Атрибут dataType сообщает jquery, какой тип контента следует ожидать в ответе.

person soulcheck    schedule 22.10.2012