2012-02-07 18 views
13

No puedo conseguir que el soporte JSON de Spring funcione. En mi archivo de primavera-servlet.xml he incluido siguientes líneas:Spring MVC y JSON, clase Jackson no encontrada excepción

<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"/> 

También he descargado bibliotecas Jackson e incluirlos en mi proyecto Eclipse y también a WEB-INF/lib. Cuando se envía la solicitud al controlador con el método jQuery getJSON me sale siguientes errores:

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

Cuál cree usted que es el problema. Supongo que tiene algo que ver con mi archivo spring-servlet.xml. Puedo pegar todo el registro de errores, si es necesario.

+0

cuales frascos Jackson se han añadido? – ggreiner

+0

jackson-all-1.9.4.jar – jyriand

+1

Tengo el mismo problema con las jarras Jackson v2.0.1. Todos los frascos (núcleo, anotación, enlace de datos) en su lugar. ¿Resolviste este problema por casualidad? – TMan

Respuesta

5

JsonProcessingException es parte de jackson-core-asl-x.x.x.jar. Asegúrese de que sea parte de su classpath.

+0

Sí tengo, pero aún no funciona – jyriand

+0

Bueno, yo puedo lo veo sentado en el paquete de jackson-core, todavía recibiendo la excepción –

43

Para frascos Jackson v2, clase que se utilizará para el frijol debe ser

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

Para la versión más vieja Jackson, org.springframework.http.converter.json.MappingJacksonHttpMessageConverter está bien. Asegúrese de que los archivos jar se agreguen a la biblioteca del proyecto.

+0

Muchas gracias, me ayudó mucho. – Roman

10

La respuesta de anshul tiwari captura parcialmente el problema. Aquí hay una respuesta más completa ...

Cuando Jackson llegó a la versión 2.0, la biblioteca central cambió de jackson-core-asl-x.x.x.jar a jackson-core-x.x.x.jar. Con eso, los caminos cambiaron. En la versión 1, org.codehaus.jackson era el camino. En la versión 2, está en com.fasterxml.jackson.core si abre el archivo jar.

Ahora, si tiene las bibliotecas de la versión 2 y está viendo la org.codehaus.jackson ClassNotFoundException, significa que hay una mezcla de versiones. Algunos códigos esperan v1 pero usted ha proporcionado v2. Esto es ciertamente posible cuando se usa Spring, por lo que debe tener cuidado de elegir el archivo jar correcto para su código.

EDITAR

De hecho, mirando a 3,2 código fuente de Primavera, org.springframework.http.converter.json.MappingJacksonHttpMessageConverter aún hace referencia a la materia org.codehaus por lo que este es un caso en el que el código fuente de Primavera necesita importar el camino correcto y no hay nada que la desarrollador puede hacer para usar Jackson 2.

+0

Esta respuesta acaba de terminar 6 horas de golpear mi cabeza contra una pared de ladrillos. Si pudiera +10 lo haría. La última versión de la primavera (4.1) usa jackson 2. –

1

Sólo para complementar la respuesta Tiwari anshul, la etiqueta debe ir dentro de frijol MVC: anotación conductor:

<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> 
0

usarlo como a continuación: La esperanza de que funcione ..

http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd " default-lazy-init =" true ">

<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> 

Cuestiones relacionadas