我正在使用以下内容创建Jersey JAX-RS Web服务:
package com.mycompany.rest.config;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("")
public class ApplicationConfig extends Application {
@Override
public Set<Class<?>> getClasses() {
return getRestResourceClasses();
}
private Set<Class<?>> getRestResourceClasses() {
Set<Class<?>> resources = new java.util.HashSet<Class<?>>();
resources.add(com.mycompany.rest.controllers.UserController.class);
return resources;
}
}
但是,当我尝试集成spring applicationContext时,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.mycompany.rest.user"/>
<bean id="userService" class="com.mycompany.rest.user.UserServiceImpl" />
</beans>
我从我的控制器类获取由上面粘贴的bean加载的userService的空指针。我假设这是因为应用程序上下文没有加载到Jersey应用程序中。
有没有办法做到这一点?
答案 0 :(得分:1)
如果要将Spring bean注入Jersey资源类,则需要在类路径中添加jersey-spring3依赖项。见https://jersey.java.net/documentation/latest/spring.html
可以在https://github.com/jersey/jersey/tree/2.19/examples/helloworld-spring-webapp
找到一个hello-world示例答案 1 :(得分:1)
我遇到了同样的问题,我通过在服务中添加@autowired并扩展SpringBeanAutowiringSupport来解决此问题,如下所示:
@Path("/mails")
public class MailController extends SpringBeanAutowiringSupport{
@Autowired
private MailService mailService;
@GET
@Path("/{code}")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public String getMails(@PathParam("code") String code) throws Exception {
//function logic
}
请注意,这无需集成jersey-springx.jar就可以正常工作 而且我正在使用Spring 3和jersey-bundle-1.19.1.jar