Подтвердить что ты не робот

Spring MVC и JSON, класс Jackson не найден исключение

Я не могу получить поддержку Spring JSON. В моем файле spring -servlet.xml я включил следующие строки:

<mvc:annotation-driven/>
<context:component-scan base-package="my.packagename.here" />
<context:annotation-config />

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"
    p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />

<bean id="jacksonMessageConverter"
    class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>

Я также загрузил библиотеки Jackson и добавил их в свой проект eclipse, а также в папку WEB-INF/lib. При отправке запроса контроллеру с помощью метода jQuery getJSON я получаю следующие ошибки:

javax.servlet.ServletException: Servlet.init() for servlet dispatcher threw exception
java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonProcessingException
java.lang.ClassNotFoundException: org.codehaus.jackson.JsonProcessingException

Как вы думаете, в чем проблема. Я предполагаю, что это имеет какое-то отношение к моему файлу spring-servlet.xml. Я могу вставить полный журнал ошибок, если вам нужно.

4b9b3361

Ответ 1

JsonProcessingException является частью jackson-core-asl-x.x.x.jar. Убедитесь, что это часть вашего пути к классам.

Ответ 2

Для банок Jackson v2 класс, который будет использоваться для bean, должен быть

<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />

Для более старой версии jackson, org.springframework.http.converter.json.MappingJacksonHttpMessageConverter в порядке. Убедитесь, что файлы jar добавлены в библиотеку проекта.

Ответ 3

Ответ anshul tiwari частично отражает проблему. Вот более полный ответ...

Когда Джексон сделал это до версии 2.0, основная библиотека была изменена с jackson-core-asl-x.x.x.jar на jackson-core-x.x.x.jar. При этом пути изменились. В версии 1, org.codehaus.jackson - это путь. В версии 2 он находится в файле com.fasterxml.jackson.core, если вы должны открыть файл jar.

Теперь, если у вас есть библиотеки версии 2, и вы видите org.codehaus.jackson ClassNotFoundException, это означает, что существует смешение версий. Некоторый код ожидает v1, но вы предоставили v2. Это возможно при использовании Spring, поэтому вам нужно быть осторожным, чтобы выбрать правильный файл jar для вашего кода.

ИЗМЕНИТЬ

Фактически, глядя на исходный код 3.2 Spring, org.springframework.http.converter.json.MappingJacksonHttpMessageConverter все еще ссылается на материал org.codehaus, так что это случай, когда исходный код Spring должен импортировать правильный путь, и вы ничего не можете сделать разработчику сделать, чтобы использовать jackson 2.

Ответ 4

Чтобы дополнить ответ anshul tiwari, тег bean должен войти в mvc: annotation-driver:

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean
            class="org.springframework.http.converter.ResourceHttpMessageConverter" />
        <!-- <bean -->
        <!-- class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" 
            /> -->
        <bean
            class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
        <!-- <bean -->
        <!-- class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" 
            /> -->
    </mvc:message-converters>
</mvc:annotation-driven>

Ответ 5

Используйте его, как показано ниже: Надеюсь, он сработает.

http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd "  по умолчанию-ленивым-INIT =" истинный" >

<context:component-scan base-package="com.vc.bmp.resource" />
<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <!-- property name="prefixJson" value="true" />
            <property name="supportedMediaTypes" value="application/json" /-->
            <property name="objectMapper">
                <bean class="com.fasterxml.jackson.databind.ObjectMapper">
                    <property name="serializationInclusion">
                        <value type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value>
                    </property>
                </bean>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>