1

我正在使用Jersey-Spring集成来公开业务层服务。
在我的 web.xml 中,我使用的是 SpringServlet:

com.sun.jersey.spi.spring.container.servlet.SpringServlet

我的业务层被@Component注释了,所以我通过 Spring 的注释配置提供了 @Serviceusing 。Repository通过注释提供给service 。@Repository@Autowired

如果我通过使用我的前端 MVC 类的服务使用存储库,则一切顺利,但如果我通过 Jersey 使用它,我会在存储库对象上得到一个。NullPointerException

我正在使用的版本(通过 Maven)是:

  • Spring(和扩展):3.1.3.RELEASE
  • 泽西岛(和扩展):1.17
4

2 回答 2

1

有办法使用您问题中提到的相同版本来解决此问题,

如果需要不提第二种方法,第一种方法是通过 web.xml 加载 sring,如下所示,作为正常的 spring 配置:

<servlet>
    <servlet-name>project-spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:project-spring-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>project-spring</servlet-name>
    <url-pattern>*.htm</url-pattern>
  </servlet-mapping>

现在通过应用程序加载你的球衣资源,如下所示:

@ApplicationPath("/rest")
public class ResourceLoader extends Application
{

    /* (non-Javadoc)
     * @see javax.ws.rs.core.Application#getClasses()
     */
    @Override
    public Set<Class<?>> getClasses()
    {
        Set<Class<?>> classes = new HashSet<Class<?>>();
        loadResourceClasses(classes);
        return classes;
    }

    private void loadResourceClasses(Set<Class<?>> classes)
    {
        classes.add(StudentResource.class);
    }
}

然后在您的资源中:

@Path("student")
class StudentResource
{
    private StudentService studentService;

    StudentResource(@Context ServletContext servletContext)
    {
       ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
        this.transactionService = applicationContext.getBean(StudentService .class);
    }
}

你去 Spring 已经配置了所有的依赖注入和 Jersey !!!

于 2014-01-10T16:00:29.380 回答
0

你应该尝试使用@InjectParam

于 2013-08-12T18:14:13.047 回答