2015-04-29 2 views
0

Я пытаюсь узнать Spring MVC + Jquery Ajax, но я получаю эту ошибку на Ajax успеха Ниже моя конфигурация кодJQuery Ajax не работает с весны 3.2.3

JQuery Ajax.

$.ajax({ 
     type:"GET", 
     url:"" +attr.url +"", 
     contentType: "application/json", 
     success:function(response){ 
          console.log("Response length",response.length); 
         }, 
         error:function(e){ 
         } 
        }); 

Spring Controller

@RequestMapping(value ="/getList.htm", method= RequestMethod.GET) 
    public @ResponseBody List<SomeClass> _giveList(HttpServletResponse response) throws DaException{ 
     List<SomeClass>someClass = iSomeClass.getData(); 
     return someClass; 
    } 

Этот метод выполняется, и я могу видеть размер SomeClass. Конфигурация jackObjectMapper в applicationContext.xml

<bean id="jacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper"></bean> 
    <bean id="jacksonMessageChanger" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> 
    <property name="supportedMediaTypes" value="application/json"/> 
    </bean> 

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="messageConverters"> 
    <list> 
    <ref bean = "jacksonMessageChanger"/> 
    </list> 
    </property> 
    </bean> 

jackson dependency in POM.xml

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-core</artifactId> 
    <version>2.2.3</version> 
</dependency> 
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.2.3</version> 
</dependency> 
<dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-annotations</artifactId> 
     <version>2.2.3</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> 

Способ управления выполняется, но нет ответа в АЯКС request.So я не вижу журнал консольную Аякса функция успеха. Но я получаю эту ошибку

Ресурс, идентифицированный этим запросом, способен генерировать ответы с характеристиками, неприемлемыми в соответствии с заголовками запроса «принять». Я попытался разрешить это, добавив заголовки = «application/json». Но не повезло. Любая помощь будет по-настоящему заметна.

+0

JQuery - это передний конец, а Spring MVC - это бэкэнд, не имеющий ничего общего с этими фреймворками.Вы возвращаете что-то, называемое 'shoppingBrandMasters', я не могу найти его в вашем контроллере. –

+0

Изменили тип возврата. Извините за эту ошибку. Вы можете вытащить некоторое время и jQuery jQuery ajax и SPRING MVC –

+0

Что я имел в виду, ваш вопрос, кажется, обвиняет Jquery Ajax или Spring MVC, поскольку он не работает с другим. На самом деле это работает, поэтому вы получаете ответ об ошибке, но ошибка связана с проблемой в кодах пользователей. –

ответ

0

Проблема, с которой вы сталкиваетесь, типична, когда весенняя структура mvc не может преобразовать представление (в вашем случае json) из/в объект java. Это может произойти из-за ошибки в настройке конвертера или ошибки в процессе.

Ваш случай является первым, с Spring 3.x вы должны удалить текущие зависимости Jackson и использовать, например.

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

com.fasterxml.jackson это пакет используется для jackson 2.x который используется Spring 4.x версий.

С текущего кода, эффект такой же, как не имеющие jackson зависимостей на всех, которые отвечают за преобразование преобразование JSON/Java, и именно поэтому вы получаете свою ошибку

+0

Я уже пробовал, но это совсем не помогло. Также изменили файл POM ... теперь вы видите зависимости Jackson, которые я использую –

+0

'org.codehaus.jackson' deps - это те, которые вы должны сохранить для своей версии, поэтому удалите' com.fasterxml.jackson', это, безусловно, неправильно. Вы должны проверить еще одну вещь, что ваш 'SomeClass' является действительным POJO, с установкой/getters с ошибками, даст вам ту же ошибку –

+0

Я тоже пробовал этот ... но все равно теперь не повезло –

0

ли вы ожидали данные ответа должны быть в JSON?

$.ajax({ 
    type:"GET", 
    url:"" +attr.url +"", 

    // contentType is the type of data you're sending, Since you're not sending any 
    // data, I assume you expect the response to be in JSON format, so you need 
    // to change it to dataType: "json" 
    contentType: "application/json", 
    success:function(response){ 
     console.log("Response length",response.length); 
    }, 
    error:function(e){ 
    } 
}); 

Так что, если вы ждете список данных в формате JSON, вы, вероятно, нужно сказать своему о его регулятора, produces типа. Вам не нужно явно указывать это, поскольку вы уже определили JacksonObjectMapper, но просто попробуйте.

@RequestMapping(value ="/getList.htm", method= RequestMethod.GET, produces=MediaType.APPLICATION_JSON_VALUE) 
                   //^It's not necessary to specify like this, but just try it 
public @ResponseBody List<SomeClass> _giveList(HttpServletResponse response) throws DaException{ 
    List<SomeClass>someClass = iSomeClass.getData(); 
    return someClass; 
} 
0

Я выяснил проблему с этой должности. 406 Not Acceptable: Spring 3.2 + JSON + AJAX Я заменил .htm на .son, и это сработало. Я не знаю, что является проблемой с весной 3. с .htm

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