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 楼答案
首先,我无法在
Jersey 1.8
上测试这一点——我只有一个2.7
测试工具。但是API在这方面并没有真正改变,所以你应该没问题如果您只需要
Application
类来强制Singleton
您的HealthResource
资源,而不需要其他任何东西,那么我只需要用@Singleton
注释该类,并删除Application
类。这是最简单的我无法用
2.7
重现您的问题,因此这可能是1.8
(在本例中不太可能)的问题,或者您如何注册Application
。如果你想发布剩下的代码,我也许能帮你威尔
PS-如果可以,升级到2.8