6

我正在使用 Jersey 和 Maven 设置一个简单的 REST 服务。对于大于 1.8 的 Jersey 版本,IntelliJ 中的 web.xml 会抛出此错误:

'com.sun.jersey.spi.container.servlet.ServletContainer' is not assignable to 'javax.servlet.Servlet'

有谁知道如何解决这个问题以使用最新版本的泽西岛?

这是 web.xml

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
     version="2.5">

<display-name>R Proxy</display-name>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/r-proxy-log4j.properties</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- Jersey configuration -->
<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>org.fao.fenix.r.proxy.rest</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

<!-- Jersey configuration -->
<servlet-mapping>
    <servlet-name>jersey-servlet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

4

3 回答 3

3

对于所有有相同问题的人 - 那是因为您的类路径中没有 servlet api。只需将 servlet-api 依赖项添加到您的项目中,一切都会好起来的。

于 2015-07-14T11:52:56.247 回答
1

我也在调查这个。这是我发现的,希望它可以帮助其他人:

  1. 您的 web.xml 中可能有错误的 servlet 类。对于 Jersey 2.0 及更高版本,您应该使用组“org.glassfish”而不是旧的“com.sun.jersey”。所以,在你的 web.xml 中,你应该有:

    <servlet>
        ...
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    </servlet>
    
  2. 当我在同一个项目中无意中使用不同版本的 Jersey 时,我也遇到过这个问题。我的项目确实通过 Maven 导入了 Jersey 1.9 包,但我的代码编辑器在项目类路径上有不同版本的 Jersey。清理你的类路径,重新导入你需要的东西并检查你的 Jersey 版本,它可能会解决你的问题。

于 2014-05-28T18:03:42.057 回答
0

该错误对应于您必须添加所占用的依赖项com.sun.jersey.spi.container.servlet.ServletContainer

在此处输入图像描述

于 2016-08-01T00:43:27.077 回答