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

Tar*_*log 8 java rest jax-rs jersey jsr311

我有一个自定义上下文:

public class MyContext {
    public String doSomething() {...}
}
Run Code Online (Sandbox Code Playgroud)

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

@Provider
public class MyContextResolver implements ContextResolver<MyContext> {

     public MyContext getContext(Class<?> type) {
         return new MyContext();
     }
}
Run Code Online (Sandbox Code Playgroud)

现在在资源中我尝试注入它:

@Path("/")
public class MyResource {

    @Context MyContext context;

}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

SEVERE: Missing dependency for field: com.something.MyContext com.something.MyResource.context
Run Code Online (Sandbox Code Playgroud)

相同的代码在Apache Wink 1.1.3中运行良好,但在Jersey 1.10中失败.

任何想法将不胜感激.

小智 10

JAX-RS规范并未强制要求Apache Wink提供的行为.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);
Run Code Online (Sandbox Code Playgroud)

检索MyContext实例.

在Jersey中,您还可以直接注入ContextResolver,它可以为您节省一行代码,但请注意,此策略也不是100%可移植的.