使用Jersey应用程序中不同包的资源

时间:2014-05-07 17:58:31

标签: java servlets resources jersey

我开发了一个在休息包中使用资源的SDK:

package com.example.some.package.rest;
...
@Path("/health")
public class HealthResource {

    public HealthResource() {
        // some code
    }

    @GET
    @Path("/")
    @Produces(MediaType.TEXT_HTML)
    public Response getHealth() {
        // some code to return health
    }
}

然后我有另一个包含Application实现的包:

package com.example.different.package.rest;
...
public class HealthApplication extends Application {

    public Set<Object> getSingletons() {
        return Sets.<Object> newHashSet(new HealthResource());
    }
}

然而,这对我不起作用。我必须使用另一个包装类:

package com.example.different.package.rest;
...
@Path("")
public class WrapperHealthResource extends HealthResource {
    public WrapperHealthResource() {
        super();
    }
}

如果我在HealthApplication而不是HealthResource中使用WrapperHealthResource,那么它可以正常工作。

我认为有这个额外的课程是没有用的。我怎样才能摆脱这种复杂性?

1 个答案:

答案 0 :(得分:0)

首先,我还没能在Jersey 1.8上测试一下 - 我只有一个2.7测试工具。但是API在这个领域并没有真正改变,所以你应该没问题。

如果您只需要Application课程来强制执行Singleton资源的HealthResource而没有其他内容,那么我只需使用@Singleton注释该课程并删除您的Application课程。这是最简单的。

我无法使用2.7重现您的问题,因此这可能是1.8的问题(在这种情况下不太可能)或您如何注册Application {{1}} 1}}。如果您想发布其余代码,我可能会提供帮助。

威尔

PS - 如果你能够,请升级到2.8。