You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jersey 1.x迁移至2.x后ContextResolver注入为空问题

Jersey 2.x + JDK17 中 ContextResolver 注入为 null 的解决方案

问题背景

项目从JDK8+Jersey1.19.2升级至JDK17+Jersey2.43后,原通过@Context注入ContextResolver<MyProducer>的逻辑获取到null值,此前在JDK8环境下功能正常。

核心问题代码片段:

@Context
public void setMyProvider(ContextResolver<MyProducer> myProvider){
    if(myProvider != null) // 此处获取到null值
        this.myProducer = myProvider.getContext(MyProducer.class);
}

问题根源

Jersey 2.x 对@Context注入的处理逻辑与1.x存在本质差异:直接注入ContextResolver<T>的方式不再被框架支持,必须通过Providers接口间接获取对应的上下文解析器。

解决方案

1. 修改资源类的注入逻辑

将直接注入ContextResolver<T>改为注入Providers接口,通过该接口的getContextResolver方法获取目标解析器:

@Path("/hello-world")
public class HelloResource {

    private MyProducer myProducer;

    @Context
    public void setProviders(Providers providers){
        // 获取对应类型的ContextResolver
        ContextResolver<MyProducer> resolver = providers.getContextResolver(MyProducer.class, MediaType.WILDCARD_TYPE);
        if(resolver != null) {
            this.myProducer = resolver.getContext(MyProducer.class);
        }
    }

    @GET
    @Produces("text/plain")
    public String hello() {
        System.out.println(myProducer);
        return "Hello, World!";
    }
}

2. 确认Provider的注册有效性

确保TestProducer类被正确注册到Jersey容器:

  • 若使用包扫描,检查jersey.config.server.provider.packages参数是否包含TestProducer所在包路径
  • 若使用ResourceConfig显式注册,确保register(TestProucer.class)语句已正确添加:
public class ResourceApp extends ResourceConfig {
    public ResourceApp() {
        packages("com.example.jerseydemo2");
        register(TestProucer.class);
        register(JacksonFeature.class);
        register(HelloResource.class);
    }
}

3. 验证依赖完整性

确认Jersey 2.x的核心依赖已完整引入,特别是负责注入的jersey-hk2:

<dependency>
    <groupId>org.glassfish.jersey.inject</groupId>
    <artifactId>jersey-hk2</artifactId>
    <version>2.43</version>
</dependency>

验证步骤

  1. 启动Tomcat服务器,访问接口/api/hello-world
  2. 检查控制台输出:
    • 若Test Producer working日志正常打印,说明TestProducer已被容器加载
    • 若MyProducer实例信息正常输出,说明注入逻辑生效

内容的提问来源于stack exchange,提问作者CodeRager99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 20:14:51