0

我想要一个使用 HTTP 请求标头的版本化 REST api:

获取 /someResource

版本:1.0

现在,如果我有这个资源的 2 个版本,我的 JaxRS Web 应用程序需要能够提供适合任何一个请求版本的响应。因此,我希望以下类成为我的类路径的一部分:

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

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

现在,我想根据 Version 标头将请求分派给这些资源类之一。我假设这将使用 servlet 过滤器来完成。但由于我使用的是 Guice,我认为我正在寻找的是一个按请求注入器。

如果请求的版本为 1.0,则使用带有 SomeResourceV1 绑定的注入器,否则如果请求的版本为 2.0,则使用带有 SomeResourceV2 绑定的注入器

我认为有一种方法可以通过继承 GuiceFilter 来获得我想要的东西,但我并不完全确定。有没有人尝试过这样的事情?

4

1 回答 1

1

不完全是您所要求的,但您可以在请求媒体类型中包含版本(例如:application/vnd.foo.v1+json-vnd指定自定义供应商类型,并+json让 JAX-RS 实现知道传入请求实体是 JSON 格式)。@Consumes然后,您可以在每个方法上使用注释进行调度(例如: @Consumes("application/vnd.foo.v1+json")vs@Consumes("application/vnd.foo.v2+json")无需添加自定义过滤器。

于 2014-02-09T17:06:28.817 回答