我有自定义上下文:
public class MyContext {
public String doSomething() {...}
}
我创建了一个上下文解析器:
@Provider
public class MyContextResolver implements ContextResolver<MyContext> {
public MyContext getContext(Class<?> type) {
return new MyContext();
}
}
现在在资源中我尝试注入它:
@Path("/")
public class MyResource {
@Context MyContext context;
}
我收到以下错误:
SEVERE: Missing dependency for field: com.something.MyContext com.something.MyResource.context
相同的代码适用于Apache Wink 1.1.3,但在Jersey 1.10中失败。
任何想法都将受到赞赏。
答案 0 :(得分:10)
JAX-RS规范并未强制要求Apache提供的行为 眨眼。 IOW,您尝试使用的功能适用于Apache Wink 使您的代码不可移植。
要生成100%JAX-RS便携式代码,您需要注入 javax.ws.rs.ext.Providers实例然后使用:
ContextResolver<MyContext> r = Providers.getContextResolver(MyContext.class, null);
MyContext ctx = r.getContext(MyContext.class);
检索MyContext实例。
在Jersey中,你也可以直接注入ContextResolver, 从上面保存了一行代码,但请注意这一点 战略也不是100%便携。
答案 1 :(得分:0)
实施InjectableProvider。最有可能的方法是扩展PerRequestTypeInjectableProvider或SingletonTypeInjectableProvider。
@Provider
public class MyContextResolver extends SingletonTypeInjectableProvider<Context, MyContext>{
public MyContextResolver() {
super(MyContext.class, new MyContext());
}
}
让你拥有:
@Context MyContext context;