【问题标题】:Jax-RS url-pattern causes 404 errorJax-RS url-pattern 导致 404 错误
【发布时间】:2018-10-31 10:17:37
【问题描述】:

我在日食氧气中运行 JBOSS 6.4 EAP。

我有一个简单且有效的 web 服务,它刚刚返回是活跃的。

当我将 url 模式配置为“ /* ”时,它会按预期执行。当我在 url-pattern 中添加更实质性的模式“/rws/*”时,我得到 404

我的网址是 localhost:8080/mesh/rws/menu/isAlive

web.xml 失败此 servlet 没有对应的 servlet 块

<servlet-mapping>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <url-pattern>/rws/*</url-pattern>
</servlet-mapping>

Servlet 类

@Path("/rws/menu")
public class MenuService
{
    @GET
    @Path("/isAlive")
    public Response isAlive()
    {
        return Response.ok("I am alive").build();
    }
}

来自服务器的错误

JBWEB000065:HTTP 状态 404 - RESTEASY001185:找不到相对资源:/menu/isAlive 的完整路径:http://localhost:8080/mesh/rws/menu/isAlive

上下文参数 我已尝试按照在线各个地方的建议将上下文参数添加到 web.xml,但它似乎已经设置好了,我不知道如何超越。

<context-param>
    <param-name>resteasy.servlet.mapping.prefix</param-name>
    <param-value>/rws</param-value>
</context-param >

产生错误:

ERROR [org.apache.catalina.core] (ServerService Thread Pool -- 64) JBWEB001097: Error started context /mesh: java.lang.IllegalArgumentException: JBWEB000280: Duplicate context initialization parameter resteasy.servlet.mapping.prefix

【问题讨论】:

  • 当你在 url 模式中有 /rws/* 时,你也不应该把 /rws 放在 @Path 中。如果这样做,则 url 将是 /rws/rws。 url-pattern 是整个应用程序的前缀
  • @PaulSamsotha 您建议的解决方案也有效。如果您输入答案,我可以接受。

标签: rest jax-rs web.xml


【解决方案1】:

这就是我最终的结果。我无法完整解释为什么会这样,但这是我的推测。这使用 core.Application 类定义了一个新的 servlet,因此问题中使用的默认实现被忽略。因此,无需像我在原始问题中尝试那样设置上下文参数。

<?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" id="WebApp_ID" version="3.0">

    <servlet>
        <servlet-name>EbigExtWS</servlet-name>
        <servlet-class>javax.ws.rs.core.Application</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>EbigExtWS</servlet-name>
        <url-pattern>/rws/*</url-pattern>
    </servlet-mapping>

</web-app>

【讨论】:

    【解决方案2】:

    当您在 url 模式中有 /rws/* 时,您不应该也将 /rws 放入 @Path 中。如果你这样做,那么 url 将是/rws/rws。 url-pattern 是整个应用程序的前缀。所以只需从@Path 中删除/rws。

    【讨论】:

    • 我已经测试了解决方案以及我的答案中的解决方案。两者都有效。
    猜你喜欢
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 2013-11-24
    相关资源
    最近更新 更多