【问题标题】:404 error with Jersey REST Service on TomcatTomcat 上的 Jersey REST 服务出现 404 错误
【发布时间】:2015-06-01 15:07:04
【问题描述】:

我已经查看了有关该主题的所有可用答案,要么我面临一个完全不同的问题,要么我错过了一些重要的时间。

服务类:

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

应该有效,但无效。任何帮助将不胜感激。

我正在使用 Jersey 2.17 和 Tomcat 8.0.20

【问题讨论】:

    标签: java rest tomcat jersey jersey-2.0


    【解决方案1】:

    “我正在使用 Jersey 2.17”

    这在 2.17 中不存在

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

    我很惊讶你没有得到 class not found 异常。这意味着您可能正在混合版本。或者也许你得到了一个例外而不是告诉我们。无论如何,正确的ServletContainer应该是

    org.glassfish.jersey.servlet.ServletContainer
    

    接下来你应该做的,如果你有的话,就是去掉所有包以com.sun开头的东西(jar)。这些是泽西 1 罐。在 Jersey 2 中,包命名模式更改为 org.glassfish.xxx 如果你想让生活更轻松,请使用 Maven,只需将一个依赖项添加到整个项目中,其余的都会引入。

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

    另外,这在泽西二号也不存在

    jersey.api.json.POJOMappingFeature
    

    在 Jersey 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 支持,请下载 thisall of these。您可以在同一网站上搜索它们。这样做应该不需要额外的配置。或者,您可以只下载第二个链接中的那些,然后将包添加到 web.xml 中,如链接中所示。

    但只是为了让它工作,因为您的代码不产生或消耗任何 JSON,您可以先让核心运行,然后一旦它开始正常工作,您就可以处理 JSON 支持。

    【讨论】:

    • 添加 jersey-container-servlet 依赖项拯救了我的一天!很高兴我仍然可以不用 web.xml :-)
    • 这节省了我的时间......我已经搜索了将近 8 个小时,我只是下载 jersey-media-json 然后瞧它工作,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 2018-02-04
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    相关资源
    最近更新 更多