我正在尝试将jersey整合到现有的Spring应用程序中(Spring 2.5.5) . Jersey工作正常,但是当我自动连接现有的spring bean时,该对象为null . 下面是我的web.xml
<servlet>
<servlet-name>fs3web</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>jersey-servlet</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.fl.fs3.api;org.codehaus.jackson.jaxrs</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>fs3web</servlet-name>
<url-pattern>/fs3/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>jersey-servlet</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
而且,这里是我的应用程序上下文xml(显然这不完整,因为这是一个巨大的应用程序,还有更多的bean定义):TestPojo是我的bean我想自动装入我的jersey资源 .
<context:annotation-config />
<aop:aspectj-autoproxy/>
<context:component-scan base-package="com.fl.fs3.api,com.fl.fs3.integration.*.web"/>
我的jersey资源类和POJO类都在包 com.fl.fs3.api
中
@Component
@Path("/v1/site")
public class SitesApiControllerV1 {
@Autowired TestPojo testPojo;
@GET
@Path("/{folderName}")
@Produces(MediaType.APPLICATION_JSON)
public Response getSite(@PathParam("folderName") String folderName) {
System.out.println("pojo obj:" + testPojo);
return Response.ok("info for " + folderName).build();
}
}
@Component
public class TestPojo {
}
当我启动我的tomcat时,我在日志中看不到预期的行: INFO: Registering Spring bean, hello, of type ..... as a root resource class
当我调用我的服务 /v1/site/xyz
时,testPojo对象为null .
但是,在将它集成到我现有的项目之前,我做了一个样品平针织 spring 应用程序,它运行得很好 . 我能够在日志中看到“注册Spring bean”行 .
任何帮助表示赞赏 .
1 回答
试试这个,可能会更简化:
通过
web.xml
加载 spring ,如下图所示为普通 spring 配置:现在通过Application加载你的球衣资源,如下所示:
然后在你的资源中:
你去吧Spring已经配置了Jersey的所有依赖注入!