2014-10-22 1 views
5

임베디드 Jetty 9.x 서버의 JSON < -> POJO에서 MOXy 변환을 사용하여 Jersey 2.x를 사용하는 임.Jersey 2.x/MOXy를 사용한 사용자 정의 JSON 직렬화

프로그래밍 방식으로 특정 유형 (예 : Joda DateTime)에 대해 맞춤 JSON (비 직렬화) 루틴을 정의 할 수 있습니까 (POJO에 주석이없는 경우)? 그렇다면 어떻게해야합니까? - 난 그냥 (비) 직렬화를 사용자 정의 할 수 있도록하려는

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

과 간단한 POJO를 위해 잘 작동 :

현재 내 임베디드 부두 서버 인스턴스와 저지를 구성하기위한 다음과 같은 코드를 가지고 . 특정 유형의 컨버터를 플러그인 할 수있는 방법이의 라인을 따라, 거기 :

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