当前位置: 首页 > 知识库问答 >
问题:

带有子资源定位器的泽西版本控制

西门庆
2023-03-14

我正在使用Jersey创建RESTful API。我想通过Accept头实现版本控制。我的资源(例如MyResourceV1、MyResourceV2和SubresourceV1、SubresourceV2)被分为不同的类。现在,我使用的是内容类型应用程序/vnd。myapp。资源v1 json,对于常规资源非常有效,因为Jersey认可自定义媒体类型。

@GET
@Path("/list")
@Produces("application/vnd.myapp.resource.v1+json")
public List<MyResourceV1> getProjectList() {
//returns JSON
}

现在我的资源实现了子资源子资源

@Path("/{resourceId}/subresource/")
    @Produces("application/vnd.myapp.subresource.v1+json")
    public SubResourceV1 getSubResource() {
        return new SubResourceV1();
    }

但是,泽西岛似乎忽略了@Produces注释,这导致泽西岛抱怨在同一路径上注册了多个资源:

[...] and resource Resource{"/{resourceId}/subresource/", 0 child resources, 0 resource methods, 1 sub-resource locator, 1 method handler classes, 0 method handler instances}, contains sub resource locators on the same path /{resourceId}/subresource/.

因为MyResourceV2包含相同的路径:

@Path("/{resourceId}/subresource/")
@Produces("application/vnd.myapp.subresource.v2+json")
public SubResourceV2 getSubResource() {
    return new SubResourceV2();
}

我看到的唯一解决方法是通过不同的方法将不同的版本包含在同一个文件中。这不必要地膨胀了代码。有没有办法将我的版本分割成文件,并保留我的子资源定位器?


共有1个答案

柯冯浩
2023-03-14

我认为除了您认为必须做的事情之外,没有其他选择(一个子资源,包含所有方法)

jax-rs规范指出,子资源定位器基本上只负责为jaxrs容器提供所述子资源的适当实现。

AFAICT中没有关于接受匹配和子资源定位器的内容。

 类似资料:
  • 我正在泽西岛应用程序中使用 CDI。在根资源上,CDI 注入按预期工作,但每当我返回子资源时,CDI 注入源都不可用。 具有子资源定位器的根资源: 子资源: 错误: 我正在使用和Weld依赖项,在Undertow上运行,并将Weld servlet侦听器添加到部署中。 同样,对根资源的相同注入确实有效。< code>@Named("name ")字符串由< code>@ApplicationSco

  • 当我尝试在任何一点使用定位器时,我仍然无法创建我使用locator.create(mything.class)方法在AbstractBinder中注册的东西的实例。 我确信它们是正确绑定的,因为它们通过@inject字段注释被正确地注入到我的资源类中。 不同的是,Jersey/HK2框架正在实例化我的资源类(正如预期的那样,因为它们在我的包扫描路径中),但我似乎无法通过代码来利用ServiceLo

  • 问题内容: 分析了整个互联网,但无法弄清楚为什么会发生这种情况。我有一个最简单的项目(使用jersey-quickstart- grizzly2原型),并且只有一个Jersey资源。我将Guice用作DI,因为CDI也不想与Jersey合作。问题在于,Guice在注入Jersey的资源时无法解析要使用的类。它在外面很好用,但不适用于泽西岛。这是泽西岛的资源: 传输接口: 它的实现: 遵循Googl

  • 我决定在这部分替换Web.XML: 我指向servlet容器Jersey,它将接受对REST-Controllers的请求,表明在启动时有必要扫描路径com . skillsimprover . REST examples . REST上的包REST,并表明资源的所有方法和类的基URI都填充了/api/* 从 JAX-RS 2.x 版本开始,可以使用应用程序类或资源配置类来注册包和资源。 我执行了

  • 我正在做一项创建Jersey客户端的任务。我用的是球衣1.18。目标URL如下所示。 我需要在我的网络资源中添加一个路径参数来调用这个URL。我看到了一个添加查询参数的选项,但没有为路径参数添加选项。我的代码看起来像这样。 谁能帮我一下吗?