Tomcat 上的 Jersey REST 服务出现 404 错误
404 error with Jersey REST Service on Tomcat
我已经查看了关于该主题的所有可用答案,要么我面临一个完全不同的问题,要么我错过了一些重要的时间。
服务Class:
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>
URL:
http://localhost:8080/JunkWeb/rest/TestRestService/callService
应该可以,但没有。非常感谢任何帮助。
我正在使用 Jersey 2.17 和 Tomcat 8.0.20
"I am using Jersey 2.17"
这在 2.17 中不存在
com.sun.jersey.spi.container.servlet.ServletContainer
我很惊讶你没有得到 class 未找到异常。这意味着您可能正在混合版本。或者,也许您遇到了异常但没有告诉我们。无论如何,正确的 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>
此外,这在泽西岛二中也不存在
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 支持,请下载 this, as well as 。您可以在同一站点上搜索它们。这样做不需要额外的配置。或者,您可以只下载第二个 link 中的包,然后在 web.xml 中添加包,如 link.
中所示
但只是为了使其正常工作,因为您的代码不会产生或消耗任何 JSON,您可以先简单地获取核心 运行,然后一旦它开始正常工作,您就可以致力于 JSON 支持。
我已经查看了关于该主题的所有可用答案,要么我面临一个完全不同的问题,要么我错过了一些重要的时间。
服务Class:
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>
URL:
http://localhost:8080/JunkWeb/rest/TestRestService/callService
应该可以,但没有。非常感谢任何帮助。
我正在使用 Jersey 2.17 和 Tomcat 8.0.20
"I am using Jersey 2.17"
这在 2.17 中不存在
com.sun.jersey.spi.container.servlet.ServletContainer
我很惊讶你没有得到 class 未找到异常。这意味着您可能正在混合版本。或者,也许您遇到了异常但没有告诉我们。无论如何,正确的 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>
此外,这在泽西岛二中也不存在
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 支持,请下载 this, as well as
但只是为了使其正常工作,因为您的代码不会产生或消耗任何 JSON,您可以先简单地获取核心 运行,然后一旦它开始正常工作,您就可以致力于 JSON 支持。