首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Jersey -动态挑选资源的方法

Jersey -动态挑选资源的方法
EN

Stack Overflow用户
提问于 2012-09-12 22:25:11
回答 1查看 1.8K关注 0票数 0

我想在Jersey中基于某些注释动态调用资源方法。例如,如果我在不同的包中有两个相同的资源,具有类似的资源方法,如下所示...

代码语言:javascript
代码运行次数:0
运行
复制
package com.mycompany.controller.v1;

@Component(value = "UsersControllerv1")
@Path("/users")
public class UsersController {

    @GET
    @Version("v1")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public Response getUsers() {
    }
}


package com.mycompany.controller.v2;

@Component(value = "UsersControllerv2")
@Path("/users")
public class UsersController {

    @GET
    @Version("v2")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public Response getUsers() {
    }
}

其中@Version是指定api版本的自定义注释。我是否可以拦截一个请求(可能使用ResourceFilterFactory),该请求指定一个版本作为头参数,并使用匹配的版本调用特定的资源方法

如果尝试这样做,我会在启动时得到以下错误

代码语言:javascript
代码运行次数:0
运行
复制
12-Sep-2012 14:36:00 com.sun.jersey.spi.inject.Errors processErrorMessages
SEVERE: The following errors and warnings have been detected with resource and/or provider classes:
SEVERE: Conflicting URI templates. The URI template /users for root resource class   com.mycompany.controller.v2.UsersController and the URI template /users transform to the same regular expression /users(/.*)?
12-Sep-2012 14:36:00 com.sun.jersey.spi.spring.container.servlet.SpringServlet initiate
SEVERE: Exception occurred when intialization
com.sun.jersey.spi.inject.Errors$ErrorMessagesException
    at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170)
    at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136)
    at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:771)
    at com.sun.jersey.spi.spring.container.servlet.SpringServlet.initiate(SpringServlet.java:117)
    at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:318)
    at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:609)
    at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210)
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:373)
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:719)
    at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:114)
EN

回答 1

Stack Overflow用户

发布于 2012-09-12 23:28:20

我从未见过任何与jersey相关的版本注释的用法。我认为这是不可能的(如果是的话,也许你有一个链接要提供)。

URL模式必须是明确的(彼此之间)。

如果您想提供同一资源的两个版本,则必须在URL中提供版本。

但是,您可以在查询中设置一个参数,但它实际上不是资源的2个不同版本,而是1个版本根据输入参数以不同方式响应。

例如:

代码语言:javascript
代码运行次数:0
运行
复制
@POST
  @Path("getUsers")
    @Consumes(MediaType.TEXT_PLAIN)
    @Produces(...)
    public String getUsers(final String query){
....

允许您将所需的任何内容传递给资源。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12390405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档