Tomcat上的Jersey REST服务出现404错误

时间:2015-03-28 08:15:45

标签: java rest tomcat jersey jersey-2.0

我已经查看了有关此主题的所有答案,要么我面临完全不同的问题,要么我错过了很多时间。

服务类:

package org.test;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

//http://localhost:8080/JunkWeb/rest/TestRestService/callService
@Path("/TestRestService")
public class TestRestService {

    @GET
    @Path("/callService")
    @Produces(MediaType.TEXT_PLAIN)
    public String callService(){return "from Rest Service";}

}//class closing

的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>JunkWeb</display-name>

  <servlet>
        <servlet-name>jersey-serlvet</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>org.test</param-value>
    </init-param>
    <!-- <init-param>
      <param-name>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>jersey-serlvet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

网址:

http://localhost:8080/JunkWeb/rest/TestRestService/callService

enter image description here

应该有效,但事实并非如此。任何帮助都将非常感激。

我正在使用Jersey 2.17和Tomcat 8.0.20

1 个答案:

答案 0 :(得分:3)

  

&#34;我正在使用Jersey 2.17&#34;

这在2.17中不存在

com.sun.jersey.spi.container.servlet.ServletContainer

我很惊讶你没有找到一个未找到课程的例外。这意味着您可能正在混合版本。或许你得到一个不告诉我们的例外。无论如何,正确的ServletContainer应该是

org.glassfish.jersey.servlet.ServletContainer

接下来你应该做的,如果有的话,就是摆脱包裹以com.sun开头的一切(jar)。这些是Jersey 1罐子。在Jersey 2中,包命名模式更改为org.glassfish.xxx如果您希望简化生活,请使用Maven,只需将一个依赖项添加到整个项目中,它将完全放入其中。

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.17</version>
</dependency>

此外,这在泽西岛2中也不存在

jersey.api.json.POJOMappingFeature

在泽西2中,只需添加Maven的依赖性,生活就会很好。

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.17</version>
</dependency>

如果您不使用Maven,请下载RI套件here。打开所有文件夹并将每个jar添加到项目中。这是核心支持。

要获得JSON支持,请下载this以及all of these。您可以在同一个站点上搜索它们。这样做应该没有额外的配置。或者,您只需下载第二个链接中的那些,然后在web.xml中添加该包,如链接中所示。

但是只是为了让它工作,因为你的代码不会生成或使用任何JSON,你可以先让核心运行,然后一旦它开始正常工作,你就可以使用JSON支持。