2012-02-07 34 views
13

Tôi không thể hỗ trợ JSON của Spring làm việc. Trong tập xuân-servlet.xml của tôi đã bao gồm dòng sau:Spring MVC và JSON, lớp học không tìm thấy ngoại lệ của Jackson

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

Tôi cũng đã tải về thư viện jackson và thêm chúng vào dự án thực của tôi và cũng để WEB-INF thư mục/lib. Khi gửi yêu cầu đến bộ điều khiển với phương thức getJSON của jQuery, tôi nhận được các lỗi sau:

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

Bạn nghĩ gì là vấn đề. Tôi đoán nó có liên quan đến tập tin spring-servlet.xml của tôi. Tôi có thể dán toàn bộ nhật ký lỗi, nếu bạn cần.

+0

mà lọ jackson bạn đã thêm vào? – ggreiner

+0

jackson-all-1.9.4.jar – jyriand

+1

Tôi gặp vấn đề tương tự với các lọ Jackson v2.0.1. Tất cả các lọ (lõi, chú thích, databind) tại chỗ. Bạn có giải quyết vấn đề này không? – TMan

Trả lời

5

JsonProcessingException là một phần của jackson-core-asl-x.x.x.jar. Hãy chắc chắn rằng đó là một phần của classpath của bạn.

+0

Có, nhưng vẫn không hoạt động – jyriand

+0

Tôi có thể thấy nó ngồi ngay trong gói jackson-core, vẫn nhận được ngoại lệ –

43

Đối với lọ Jackson v2, lớp được sử dụng cho đậu nên

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

Đối với phiên bản cũ jackson, org.springframework.http.converter.json.MappingJacksonHttpMessageConverter là ok. Đảm bảo các tệp jar được thêm vào thư viện dự án.

+0

Cảm ơn bạn rất nhiều, bạn đã giúp tôi rất nhiều. – Roman

10

Câu trả lời của anshul tiwari đã thu một phần vấn đề. Đây là câu trả lời hoàn chỉnh hơn ...

Khi Jackson chuyển sang phiên bản 2.0, thư viện lõi đã được thay đổi từ jackson-core-asl-x.x.x.jar thành jackson-core-x.x.x.jar. Cùng với đó, các đường dẫn đã thay đổi. Trong phiên bản 1, org.codehaus.jackson là đường dẫn. Trong phiên bản 2, nó nằm trong com.fasterxml.jackson.core nếu bạn mở tệp jar.

Bây giờ nếu bạn có thư viện phiên bản 2 và bạn đang thấy org.codehaus.jackson ClassNotFoundException, điều đó có nghĩa là có sự trộn lẫn các phiên bản. Một số mã đang chờ v1 nhưng bạn đã cung cấp v2. Điều này chắc chắn có thể xảy ra khi sử dụng Spring nên bạn phải cẩn thận khi chọn đúng tệp jar cho mã của mình.

EDIT

Trong thực tế, nhìn vào 3,2 mã nguồn Spring, org.springframework.http.converter.json.MappingJacksonHttpMessageConverter vẫn tham chiếu những thứ org.codehaus vì vậy đây là một trường hợp mã nguồn mùa xuân cần phải nhập đường dẫn chính xác và không có gì là bạn phát triển có thể làm gì để sử dụng jackson 2.

+0

Câu trả lời này vừa kết thúc 6 giờ sau khi đập đầu tôi vào một bức tường gạch. Nếu tôi có thể +10 tôi sẽ làm. Phiên bản mới nhất của mùa xuân (4.1) sử dụng jackson 2. –

1

Chỉ cần để bổ sung cho câu trả lời Tiwari anshul, thẻ đậu nên đi bên trong MVC: chú thích lái xe:

<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

sử dụng nó như dưới đây: Hy vọng nó sẽ làm việc ..

http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd " mặc định-lười-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> 

Các vấn đề liên quan