2015-01-14 21 views
12

Tôi đang thực hiện dịch vụ web REST với Jersey 2.6,Jersey 2,6 cung cấp dịch vụ đăng ký Jackson

Tôi đang gặp rắc rối trong việc đăng ký một Provider Jackson hỗ trợ JSON, tôi đã thực hiện theo các tài liệu jeresy (https://jersey.java.net/documentation/2.6/user-guide.html#json.jackson).

  1. Add maven phụ thuộc - jersey-media-json-jackson
  2. thực hiện một lớp ContextResolver.
  3. Chú thích nó với @Provider để bật "Tính năng tự động phát hiện"
  4. web.xml có tên gói của các lớp nhà cung cấp, để Nhà cung cấp sẽ được đăng ký trong quá trình quét.

ref: http://blog.dejavu.sk/2013/11/19/registering-resources-and-providers-in-jersey-2/

Đối với một số lý do nhà cung cấp Jackson JSON không được đăng ký, tôi thiếu cái gì?

Trả lời

9

Cho đến khi Jersey 2.9, tính năng đó không được tự động phát hiện. Chúng tôi cần đăng ký rõ ràng JacksonFeature trong lớp con Application/ResourceConfig hoặc liệt kê gói Jackson trong tệp web.xml của các gói cần quét.

Application lớp con:

public class MyApplication extends ResourceConfig { 
    public MyApplication() { 
     register(JacksonFeature.class); // <----- Jackson Support 
     packages("the.package.of.your.resources"); 
    } 
} 

Hoặc web.xml:

<servlet> 
    <servlet-name>Jersey Web Application</servlet-name> 
    <servlet-class> 
     org.glassfish.jersey.servlet.ServletContainer 
    </servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value> 
      the.package.of.your.resources, 
      org.codehaus.jackson.jaxrs <!-- Jackson providers --> 
     </param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

Xem thêm chi tiết here in the "Second Issue".

Oh và chỉ là một FYI, ContextResolver chỉ đăng ký ObjectMapper trong ngữ cảnh có thể truy xuất được, vì vậy, MessageBodyReader/MessageBodyWriters có thể sử dụng lại nó. Nhưng nó không đăng ký thực tế MessageBodyReader/Writer đó là cần thiết cho marshalling/unmarshalling.

+0

Grate, tôi đã bỏ lỡ "org.codehaus.jackson.jaxrs" trong web.xml, bây giờ nó đang cố gắng tải các thư viện jackson, nhưng tôi nhận được lỗi sau java.lang.NoClassDefFoundError: org/codehaus/jackson/map/JsonMappingException –

+0

Khi nào bạn nhận được điều đó? Khi khởi động hoặc khi bạn thử và gửi yêu cầu? –

+0

Bạn đã thử và thêm bất kỳ phụ thuộc nào khác của Jackson sang một bên của Jersey? –

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