【问题标题】:REST APIs return 404 NOT FOUND when path configured in web.xml在 web.xml 中配置路径时,REST API 返回 404 NOT FOUND
【发布时间】:2016-08-14 02:01:35
【问题描述】:

我在 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("/rest/products")
    public class Product {

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

我错过了什么?

非常感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您已将您的 servlet 映射到 " /rest/* " url,即每当有一个带有 ../rest/* url 的请求时,您的 servlet ServletContainer 将被调用处理它。

      在您的 java 文件中 @Path("/rest/products") 被提及。

      由于@Path 中提到的路径中的正斜杠,您会收到此 404 错误。这是因为当您给出以正斜杠开头的路径时,它会将其作为绝对路径而不是相对路径。

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

      因此错误。

      【讨论】:

        猜你喜欢
        • 2020-02-03
        • 2016-07-22
        • 2016-11-19
        • 2015-01-07
        • 1970-01-01
        • 2021-09-11
        • 2020-01-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多