我开发了一个在休息包中使用资源的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,那么它可以正常工作。
我认为有这个额外的课程是没有用的。我怎样才能摆脱这种复杂性?
答案 0 :(得分:0)
首先,我还没能在Jersey 1.8
上测试一下 - 我只有一个2.7
测试工具。但是API在这个领域并没有真正改变,所以你应该没问题。
如果您只需要Application
课程来强制执行Singleton
资源的HealthResource
而没有其他内容,那么我只需使用@Singleton
注释该课程并删除您的Application
课程。这是最简单的。
我无法使用2.7
重现您的问题,因此这可能是1.8
的问题(在这种情况下不太可能)或您如何注册Application
{{1}} 1}}。如果您想发布其余代码,我可能会提供帮助。
威尔
PS - 如果你能够,请升级到2.8。