2014-10-22 25 views
5

Ben, yerleşik bir Jetty 9.x sunucusunun içindeki JSON < - POJO'nun yerleşik MOXy dönüşümü ile Jersey 2.x'i kullanıyorum.Özel JSON serileştirme, Jersey 2.x/MOXy

Belirli türler (ör. Joda DateTime) için programatik olarak (POJO'da ek açıklamalar olmaksızın) özel bir JSON (de) serileştirme rutinini tanımlamak mümkün mü - eğer öyleyse, nasıl? - Sadece (de) seri özelleştirmek mümkün istiyorum

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/*"); 

ve onun basit POJOs için iyi çalışıyor:

Şu benim gömülü İskele sunucusu örneği ile Jersey yapılandırmak için aşağıdaki kodu var . belirli türleri için dönüştürücüler eklentisi için bir yol çizgisinde var mı:

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

cevap

0

Sana this wiki article ilgini çekebileceğini düşünüyorum. Çoğu XML serileştirme ile ilgilenir, ancak altta JSON serileştirmeyi nasıl özelleştireceğinizi bulacaksınız.

Temel olarak, özel bir JSONJAXBContext özel bir JSONConfiguration özel olan bir özel ContextResolver<JAXBContext> oluşturur. @Provider ile ek açıklama eklemeyi unutma (ve gerekirse Uygulamaya kaydet). Tamlık için örnek kodu kopyalayacağım, bu şeylerin ne kadar süre hayatta kalacağını asla bilemezsiniz :)

@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; 
    } 
} 
İlgili konular