有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在Jersey应用程序中使用来自不同包的资源

我开发了一个SDK,它使用rest包中的资源:

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
    }
}

然后,我有另一个带有应用程序实现的包:

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中使用WrapperHealthResource而不是HealthResource,那么它可以正常工作

我认为多上一节课是没用的。我怎样才能摆脱这种复杂性


共 (1) 个答案

  1. # 1 楼答案

    首先,我无法在Jersey 1.8上测试这一点——我只有一个2.7测试工具。但是API在这方面并没有真正改变,所以你应该没问题

    如果您只需要Application类来强制Singleton您的HealthResource资源,而不需要其他任何东西,那么我只需要用@Singleton注释该类,并删除Application类。这是最简单的

    我无法用2.7重现您的问题,因此这可能是1.8(在本例中不太可能)的问题,或者您如何注册Application。如果你想发布剩下的代码,我也许能帮你

    威尔

    PS-如果可以,升级到2.8