2014-02-07 4 views
0

내가 HTTP 요청을 사용하여 헤더 버전 관리 REST API를 가지고 싶습니다버전의 REST API + JaxRS 2.0

GET/someResource

버전 : 이제 1.0

경우 이 리소스의 버전이 2 개인 JaxRS 웹 애플리케이션은 요청 된 버전 중 하나에 적절한 응답을 제공 할 수 있어야합니다. 이와 같이 나는 다음과 같은 클래스 내 클래스 경로의 일부가 될 기대 :

@Path("/someResource") 
public class SomeResourceV1 { 
    **snip** 
} 

지금

@Path("/someResource") 
public class SomeResourceV2 { 
    **snip** 
} 

나는 버전 헤더에 따라 이러한 자원 클래스 중 하나에 요청을 전달하고 싶습니다 . 서블릿 필터를 사용하여이 작업을 수행한다고 가정합니다. 하지만 Guice를 사용하고 있기 때문에 내가 찾고있는 것은 요청 당 인젝터 당이라고 생각합니다.

요청은 요청이 SomeResourceV2

내가 GuiceFilter을 하위 클래스 내가 원하는 것을 얻을 수있는 방법이 있다고 생각

에 대한 바인딩 버전 2.0을 사용 인젝터를 가지고, 그렇지 않은 경우 SomeResourceV1 에 대한 바인딩 버전 1.0을 사용 인젝터를 가지고 있지만 난 경우 완전히 확실하지 않습니다. 아무도 전에 이런 걸 시도 했나요? 당신이 요구하고 있지만 요청 미디어 타입의 버전을 포함 할 수 없음 정확히

답변

0

는 (예 : application/vnd.foo.v1+json-vnd 사용자 지정 공급 업체 유형을 지정하고, 들어오는 요청이 알고 +json는 JAX-RS 구현을 할 수 있습니다 엔티티는 JSON 형식입니다.) . 다음, 당신은 당신의 방법 (예를 들어 각각의 @Consumes 주석을 사용하여 전달할 수 있습니다 @Consumes("application/vnd.foo.v2+json")@Consumes("application/vnd.foo.v1+json") 사용자 지정 필터를 추가 할 필요없이

+0

감사 자비에르, 나는 미디어 유형에 대해 생각하지만 난 조 wtih 동의하는 경향이 : HTTP ://stackoverflow.com/a/11923744/1028367 또한, 동일한 클래스의 두 버전에 대한 코드를 혼합하는 아이디어가 실제로 마음에 들지 않습니다. 실수로 V1 코드 패트에서 V1 소비자를 부주의하게 변경할 수도 있습니다. V2가 요청 된 경우 V1은 jaxrs 리소스로 바인딩되거나 노출되지 않습니다. –