尝试向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;