尝试向Jersey注入自定义上下文时缺少字段依赖项

我有一个自定义上下文:

public class MyContext { public String doSomething() {...} } 

我创建了一个上下文解析器:

 @Provider public class MyContextResolver implements ContextResolver { 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中失败。

任何想法将不胜感激。

JAX-RS规范并未强制要求Apache Wink提供的行为。 IOW,您尝试使用的function适用于Apache Wink,使您的代码不可移植。

要生成100%JAX-RS可移植代码,您需要注入javax.ws.rs.ext.Providers实例,然后使用:

 ContextResolver r = Providers.getContextResolver(MyContext.class, null); MyContext ctx = r.getContext(MyContext.class); 

检索MyContext实例。

在Jersey中,你也可以直接注入ContextResolver,它可以从上面保存一行代码,但请注意,这种策略也不是100%可移植的。

实现InjectableProvider 。 最有可能通过扩展PerRequestTypeInjectableProvider或SingletonTypeInjectableProvider。

 @Provider public class MyContextResolver extends SingletonTypeInjectableProvider{ public MyContextResolver() { super(MyContext.class, new MyContext()); } } 

让你有:

 @Context MyContext context;