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

基于Grizzly的Jersey测试:如何用Spring Java配置搭建测试上下文?

如何让JerseyTest使用Spring Java上下文配置?

我正在使用JAX-RS、Jersey和Spring框架,当前的JAX-RS资源集成测试代码如下:

public class MyResourceIT extends JerseyTest {

    @Override
    protected Application configure() {
        return new ResourceConfig(MyResource.class);
    }

    @Test
    public void getHealth() {
      // some code
    }
}

启动测试时出现如下错误:

org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [applicationContext.xml]; nested exception is java.io.FileNotFoundException: class path resource [applicationContext.xml] cannot be opened because it does not exist
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:196)

我可以创建applicationContext.xml文件,但更希望使用Spring基于Java的容器配置来搭建测试上下文,请问如何实现?


解决步骤

1. 引入Jersey与Spring集成的依赖

根据你的Spring版本,添加对应的Jersey-Spring集成依赖,以Spring 4.x为例,Maven配置如下:

<dependency>
    <groupId>org.glassfish.jersey.ext</groupId>
    <artifactId>jersey-spring4</artifactId>
    <version>你的Jersey版本</version>
    <scope>test</scope>
</dependency>

2. 编写Spring Java配置类

创建基于注解的Spring配置类,替代XML配置:

@Configuration
@ComponentScan(basePackages = "com.your.project.package") // 替换为你的资源、服务所在包路径
public class SpringTestConfig {
    // 可在此手动定义Bean,或通过@ComponentScan自动扫描组件
}

3. 修改JerseyTest配置,关联Spring Java上下文

调整configure方法,初始化Spring注解上下文并绑定到Jersey的ResourceConfig:

public class MyResourceIT extends JerseyTest {

    @Override
    protected Application configure() {
        // 初始化Spring注解配置上下文
        AnnotationConfigApplicationContext springContext = new AnnotationConfigApplicationContext(SpringTestConfig.class);
        
        // 配置Jersey资源
        ResourceConfig config = new ResourceConfig(MyResource.class);
        // 将Spring上下文注入Jersey
        config.property("contextConfig", springContext);
        // 注册Spring组件提供者,确保Jersey能识别Spring管理的Bean
        config.register(SpringComponentProvider.class);
        
        return config;
    }

    @Test
    public void getHealth() {
        // 示例测试逻辑
        Response response = target("/health").request().get();
        assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
        response.close();
    }
}

原理说明

Jersey与Spring集成时,默认会尝试从类路径加载applicationContext.xml作为Spring配置文件。通过手动初始化AnnotationConfigApplicationContext并绑定到Jersey的ResourceConfig,可以让Jersey使用Spring的Java注解配置,不再依赖XML文件。


内容的提问来源于stack exchange,提问作者Harold L. Brown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 20:45:17