2014-10-24 2 views
1

Spring을 사용하지 않고 JAX-RS (저지)로 간단한 REST 서비스를 만들려고합니다. 그리고 Joda를 내 엔터티의 날짜 필드로 사용하고 있습니다. JAX-RS, Jackson 및 JodaTime : 자동 구성이 작동하지 않습니다.

자동 JSON 매핑을 구성하려면 내가 추가 할 JsonMapperProvider을 만들 JodaModule : 이것은 내 자원 클래스

@Provider 
@Produces(MediaType.APPLICATION_JSON) 
public class JsonMapperProvider implements ContextResolver<ObjectMapper> { 

    final ObjectMapper objectMapper; 

    public JsonMapperProvider() { 
     objectMapper = new ObjectMapper(); 
     objectMapper.registerModule(new JodaModule()); 
    } 

    @Override 
    public ObjectMapper getContext(Class<?> arg0) { 
     return objectMapper; 
    } 

} 


입니다 :

@Path("users") 
public class UserController { 

    @Inject 
    private UserService userService; 

    @GET 
    @Path("/{id}") 
    @Produces(MediaType.APPLICATION_JSON) 
    public User getUserById(@PathParam("id") Long id) { 

     return userService.findById(id); 
    } 
} 


그리고 나는를 사용하고 있습니다 "no web.xml"구성은 다음 클래스로 구성됩니다.

@ApplicationPath("api") 
public class RestApplication extends ResourceConfig { 

} 


하지만 작동하지 않습니다. User 엔터티의 LocalDate 필드는 항상 비어 있습니다. 이 문제에 대한 또 다른 해결책은

@ApplicationPath("api") 
public class RestApplication extends ResourceConfig { 

    public RestApplication() { 
     super(
       UserController.class, 
       JsonMapperProvider.class, 
       JacksonFeature.class 
     ); 
    } 
} 

있습니까 : 내가 찾은 유일한 해결 방법은이처럼 ResourceConfig 클래스 (저지 - 미디어 JSON-잭슨에서 JacksonFeature 클래스를 포함하여) 모든 구성 요소를 등록하는 것입니다? 차라리이 수업에 내 모든 서비스와 다른 것들을 수동으로 등록하지 않을 것입니다 ...

답변

1

아니, 이것이 어떻게 작동하는지입니다. 또한 확장 대신 javax.ws.rs.core.Application의 메서드를 재정의 할 수도 있습니다. ResourceConfig

+0

그래, 그렇습니다. 그러나 내가 싫어하는 것은 : "수동으로"(ResourceConfig 하위 클래스 생성자 또는 응용 프로그램 메서드에서) JacksonMapper를 등록하면 내 자원 클래스를 등록해야합니다. 왜냐하면 어떤 이유로이 생성자를 만들면 \t 공공 RestApplication() { 패키지 ("COM : 자원 및 기타 물건 그런데 ..."수동으로 "등록 할 필요는, 나는 조금이와 함께, 그것은 작동, 수동 등록을 위해 개선 발견했다. edwise.pocs.jerseyrest "); 등록 (JacksonFeature.class); } – edwise

관련 문제