2012-02-07 10 views
13

Nie mogę uzyskać wsparcia Spring JSON działającego. W moim pliku wiosna-servlet.xml mam włączone następujące linie:Wiosna MVC i JSON, klasa Jackson nie znalazła wyjątku

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

Mam również pobrać biblioteki Jackson i dodaje je do mojego projektu Eclipse i również do WEB-INF/lib folderu. Podczas wysyłania żądania do kontrolera metodą jQuery getJSON otrzymuję następujące błędy:

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

Co myślisz jest problem. Zgaduję, że ma to coś wspólnego z moim plikiem spring-servlet.xml. Mogę wkleić cały dziennik błędów, jeśli potrzebujesz.

+0

który Jackson słoiki dodałeś? – ggreiner

+0

jackson-all-1.9.4.jar – jyriand

+1

Mam taki sam problem z słoikami Jackson v2.0.1. Wszystkie słoiki (rdzeń, adnotacja, databind) w miejscu. Czy rozwiązałeś ten problem przez przypadek? – TMan

Odpowiedz

5

JsonProcessingException jest częścią jackson-core-asl-x.x.x.jar. Upewnij się, że jest częścią Twojej ścieżki klas.

+0

Tak, mam, ale nadal nie działa – jyriand

+0

Cóż, mogę zobacz, jak siedzi w pakiecie z jackson-core, wciąż otrzymuję wyjątek –

43

Dla słoików Jacksona v2, klasa zostać wykorzystane do fasoli powinny być

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

Dla starszej wersji Jackson, org.springframework.http.converter.json.MappingJacksonHttpMessageConverter jest w porządku. Upewnij się, że pliki JAR zostały dodane do biblioteki projektu.

+0

Dziękuję bardzo, bardzo mi pomogłeś. – Roman

10

Odpowiedź anshula tiwari częściowo uchwyciła problem. Oto bardziej kompletna odpowiedź ...

Kiedy Jackson dotarł do wersji 2.0, biblioteka jądrowa została zmieniona z jackson-core-asl-x.x.x.jar na jackson-core-x.x.x.jar. Dzięki temu ścieżki się zmieniły. W wersji 1 ścieżka była org.codehaus.jackson. W wersji 2 znajduje się w com.fasterxml.jackson.core, jeśli chcesz otworzyć plik jar.

Teraz, jeśli masz biblioteki wersji 2 i widzisz wyjątek org.codehaus.jackson ClassNotFoundException, oznacza to, że jest mieszanie wersji. Niektóre kod spodziewa się v1, ale podałeś v2. Jest to z pewnością możliwe, gdy używasz Springa, więc musisz uważać, aby wybrać właściwy plik JAR dla Twojego kodu.

EDIT

W rzeczywistości, patrząc na 3.2 kodu źródłowego wiosennego org.springframework.http.converter.json.MappingJacksonHttpMessageConverter nadal odwołuje się do rzeczy org.codehaus więc jest to przypadek, gdy kod źródłowy Wiosna musi importować poprawną ścieżkę i nie ma nic Ci programista może zrobić, aby skorzystać Jackson 2.

+0

Ta odpowiedź skończyła się 6 godzin walenia głową o ścianę z cegieł. Gdybym mógł +10 zrobiłbym. Najnowsza wersja sprężyny (4.1) używa jackson 2. –

1

Wystarczy uzupełnić Anshul Tiwari odpowiedź tag fasola powinna pójść wewnątrz MVC: adnotacja kierowcy:

<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

używać go jak poniżej: Mam nadzieję, że to będzie działać ..

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>