2012-02-07 23 views
13

Non riesco a far funzionare il supporto JSON di Spring. Nel mio file primavera-servlet.xml ho incluso le righe seguenti:Spring MVC e JSON, classe Jackson non trovata eccezione

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

Ho scaricato anche librerie di Jackson e ha aggiunto al mio progetto Eclipse e anche per cartella WEB-INF/lib. Quando si invia richiesta al controllore con il metodo jQuery getJSON ottengo seguenti errori:

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

Cosa pensi sia il problema. Immagino che abbia qualcosa a che fare con il mio file spring-servlet.xml. Posso incollare l'intero registro degli errori, se necessario.

+0

che vasetti jackson avete aggiunto? – ggreiner

+0

jackson-all-1.9.4.jar – jyriand

+1

Ho lo stesso problema con i vasi di Jackson v2.0.1. Tutti i vasi (nucleo, annotazione, database) sul posto. Hai risolto questo problema per caso? – TMan

risposta

5

JsonProcessingException fa parte di jackson-core-asl-x.x.x.jar. Assicurati che faccia parte del tuo classpath.

+0

Sì, ma ancora non funziona – jyriand

+0

Beh, io posso vederlo seduto proprio lì nel pacchetto jackson-core, ottenendo ancora l'eccezione –

43

Per Jackson v2 vasetti, classe da utilizzare per il bean dovrebbe essere

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

Per versione precedente Jackson, org.springframework.http.converter.json.MappingJacksonHttpMessageConverter è ok. Assicurati che i file jar siano aggiunti alla libreria del progetto.

+0

Grazie mille, mi hai aiutato molto. – Roman

10

La risposta di anshul tiwari riprende parzialmente il problema. Ecco una risposta più completa ...

Quando Jackson è arrivato alla versione 2.0, la libreria principale è stata cambiata da jackson-core-asl-x.x.x.jar a jackson-core-x.x.x.jar. Con ciò, i percorsi sono cambiati. Nella versione 1, org.codehaus.jackson era il percorso. Nella versione 2, è in com.fasterxml.jackson.core se si dovesse aprire il file jar.

Ora se si dispone delle librerie della versione 2 e si vede l'org.codehaus.jackson ClassNotFoundException, significa che esiste una combinazione di versioni. Qualche codice si aspetta v1 ma hai fornito la v2. Questo è certamente possibile quando si utilizza Spring, quindi è necessario fare attenzione a scegliere il file jar corretto per il proprio codice.

EDIT

In effetti, guardando 3,2 codice sorgente Primavera, org.springframework.http.converter.json.MappingJacksonHttpMessageConverter fa ancora riferimento la roba org.codehaus quindi questo è un caso in cui il codice sorgente primavera ha bisogno di importare il percorso corretto e non c'è niente che la sviluppatore può fare per utilizzare jackson 2.

+0

Questa risposta ha appena finito 6 ore di colpire la mia testa contro un muro di mattoni. Se potessi +10 lo farei. L'ultima versione di spring (4.1) usa jackson 2. –

1

Giusto per completare risposta tiwari Anshul, il tag di fagioli dovrebbe andare all'interno MVC: annotazione-pilota:

<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

utilizzarlo come qui di seguito: Spero che funzionerà ..

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> 

Problemi correlati