在web.xml中配置路径时,REST API返回404 NOT FOUND

时间:2016-08-14 02:01:35

标签: java jax-rs web.xml jersey-2.0

我在eclipse中使用Jersey配置了一个REST应用程序。

当web.xml中的路径配置为/*时,我无法发送REST请求,但当我将其更改为/rest/*时,我收到404 NOT FOUND错误。 服务器上没有例外。

web.xml文件如下所示:

<servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.app.user</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>

以下是我在java文件中声明Path的方法

@Path("/rest/products")
    public class Product {

当我访问服务器URL上的路径/ rest / products时,我收到404错误。

我错过了什么?

非常感谢帮助!

2 个答案:

答案 0 :(得分:1)

当您将Jersey Web应用程序映射到/rest/*时,所有请求都应该在其路径中有/rest。您已将Product课程映射到/rest/products,因此整个网址应为http://localhost:port/contextRoot/rest/rest/products。如果您不想在网址中休息两次,只需将Product课程映射到/products

答案 1 :(得分:0)

您已将servlet映射到&#34; / rest / *&#34; url,即每当有一个带有....... / rest / * url的请求时,你的servlet ServletContainer都会被调用来处理它。

在您的java文件中 @Path(&#34; / rest / products&#34;)

由于@Path中提到的路径中的正斜杠,您收到此404错误。这是因为当你使用正斜杠开始路径时,它将它作为绝对路径而不是相对路径。

因此您的最终网址不会像 / myProject / rest / products 那样结束,而是看起来像 / rest / products ,它无法找到。

因此错误。