2014-10-22 3 views
5

Im с использованием Jersey 2.x со встроенным MOXy преобразованием из JSON < -> POJO внутри встроенного сервера Jetty 9.x.Пользовательская сериализация JSON с Джерси 2.x/MOXy

Можно ли программным способом (например, Joda DateTime) определить пользовательскую процедуру сериализации JSON (de) для определенных типов (например, Joda DateTime) - если да, то каким образом?

В настоящее время у меня есть следующий код для настройки Джерси с моим вложенным например Jetty сервера:

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

и его работает отлично для простого POJOs - Я просто хочу, чтобы иметь возможность настроить (де) сериализации , Есть ли способ, чтобы плагин конвертеры для конкретных типов, вдоль линий:

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

ответ

0

Я думаю, что вы могли бы быть заинтересованы в this wiki article. Большинство из них связано с сериализацией XML, но внизу вы узнаете, как настроить сериализацию JSON.

В основном вы создаете пользовательский ContextResolver<JAXBContext>, который возвращает пользовательский номер JSONJAXBContext, который, в свою очередь, имеет пользовательский номер JSONConfiguration. Не забудьте аннотировать его @Provider (и зарегистрируйте его в своем Приложении, если необходимо). Я скопирую примерный код для полноты, вы никогда не знаете, как долго эти вещи выживают :)

@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; 
    } 
}