标签:java jersey jax-rs jersey-2-0
我正在编写自定义JAX-RS 2.0应用程序(在Jersey 2.3.1下),它包含一些数据供所有资源使用.
public class WebApp extends org.glassfish.jersey.server.ResourceConfig {
public WebApp() {
packages("my.resources.package");
}
}
(我也可以使用API的javax.ws.rs.core.Application,描述的结果是一样的)
然后我将对象注入资源
@Path("test")
public class Test {
@Context
Application app;
@GET
@Path("test")
public String test() {
return "Application class: " + app.getClass();
}
}
但是,通话的结果是
Application class: class org.glassfish.jersey.server.ResourceConfig$WrappingResourceConfig
这让我使用了一些丑陋的技巧
if (app instanceof WebApp) {
return (WebApp) app;
} else if (app instanceof ResourceConfig) {
return (WebApp) ((ResourceConfig) app).getApplication();
}
我对JAX-RS 2.0规范9.2.1的理解:
The instance of the application-supplied
Application
subclass can be injected into a class field or method parameter using the@Context
annotation. Access to theApplication
subclass instance allows configuration information to be centralized in that class. Note that this cannot be injected into theApplication
subclass itself since this would create a circular dependency.
是应用程序提供的Application子类是我的WebApp,而不是JAX-RS特定于实现的包装器.
另外,改变这个片段
@Context
Application app;
对此
@Context
WebApp app;
由于上下文注入期间的ClassCastException,导致app为null,因此声明的类型无关紧要.
这是泽西岛的一个错误还是我的误解?
更新:我检查了RESTEasy 3.0下的行为.注入的对象是我的WebApp,没有任何包装器.我把它称为泽西岛的一个错误.
解决方法:
这似乎不是一个错误.根据JAX-RS 2.0规范,您可以将Application注入您的资源类(例如),但它没有说明直接注入Application的自定义扩展.不确定您的用例是什么,但您可以注册自定义HK2 binder,这将允许您直接将WebApp注入资源:
public class WebApp extends org.glassfish.jersey.server.ResourceConfig {
public WebApp() {
packages("my.resources.package");
register(new org.glassfish.hk2.utilities.binding.AbstractBinder() {
@Override
protected void configure() {
bind(WebApp.this);
}
});
}
}
标签:java,jersey,jax-rs,jersey-2-0 来源: https://codeday.me/bug/20190703/1367187.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。