2014-10-22 16 views
5

Im sử dụng Jersey 2.x được tích hợp sẵn trong chuyển đổi MOXy từ JSON < -> POJO bên trong một máy chủ 9.x Jetty được nhúng.Nối tiếp JSON tùy chỉnh với Jersey 2.x/MOXy

Có thể xác định thói quen tuần tự hóa JSON (de) tùy chỉnh cho các loại cụ thể (ví dụ: Joda DateTime) theo lập trình (không có chú thích trên POJO) - nếu có, như thế nào?

Hiện nay tôi đã có đoạn mã sau để cấu hình Jersey với ví dụ máy chủ Jetty nhúng của tôi:

ResourceConfig resourceConfig = new ResourceConfig(); 
    resourceConfig.packages("com.company.app.rest.v1"); 
    resourceConfig.register(new GZipEncoder()); 
    resourceConfig.register(new LoggingFilter()); 
    ServletHolder servletHolder = new ServletHolder(new ServletContainer(resourceConfig)); 

    context.addServlet(servletHolder, "/rest/v1/*"); 

và làm việc của nó tốt cho các POJO đơn giản - Tôi chỉ muốn để có thể tùy biến (de) serialization . Có cách nào để chuyển đổi plugin cho các loại cụ thể, dọc theo các dòng:

registerTypeConverter(MySpecificType.class, CustomReader.class, CustomWriter.class); 

Trả lời

0

Tôi nghĩ bạn có thể quan tâm đến this wiki article. Hầu hết các giao dịch với serialization XML, nhưng ở phía dưới bạn sẽ tìm thấy cách tùy chỉnh serialization JSON.

Về cơ bản, bạn tạo một tùy chỉnh ContextResolver<JAXBContext> trả về tùy chỉnh JSONJAXBContext do đó có tùy chỉnh JSONConfiguration. Đừng quên chú thích nó với @Provider (và đăng ký nó trong ứng dụng của bạn nếu cần thiết). Tôi sẽ sao chép mã ví dụ để hoàn thành, bạn không bao giờ biết được những điều này tồn tại bao lâu :)

@Provider 
public class JAXBContextResolver implements ContextResolver<JAXBContext> { 

    private JAXBContext context; 
    private Class[] types = { Address.class, Customer.class, CustomerResource.class }; 

    public JAXBContextResolver() throws Exception { 
     this.context = new JSONJAXBContext(JSONConfiguration.natural().build(), types); 
    } 

    public JAXBContext getContext(Class<?> objectType) { 
     for (Class type : types) { 
      if (type == objectType) { 
       return context; 
      } 
     } 
     return null; 
    } 
} 
Các vấn đề liên quan