You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JAX-RS配置url-pattern为/rws/*时出现404错误求助

解决JBoss EAP 6.4中JAX-RS服务url-pattern设为/rws/*时的404问题

嘿,我碰到过类似的坑,给你捋清楚怎么解决:

你的问题核心是JAX-RS注解路径和Servlet映射路径叠加导致的不匹配,再加上JBoss EAP 6.4自带Resteasy的默认配置冲突,一步步来解决:

为啥会出问题?

  1. 路径叠加冲突:当你把servlet-mapping设为/rws/*,同时在MenuService上标注@Path("/rws/menu"),Resteasy会把这两个路径拼起来——也就是/rws(Servlet映射前缀) + /rws/menu/isAlive(注解路径),实际找的是/rws/rws/menu/isAlive,但你访问的是/rws/menu/isAlive,肯定404啊。
  2. 重复参数报错:JBoss EAP 6.4里的Resteasy已经在容器层面默认配置了resteasy.servlet.mapping.prefix,你再在web.xml里加一遍,就触发重复定义的异常了。

两种靠谱的解决办法

办法一:改代码里的@Path,去掉重复前缀

最简单的方式就是把MenuService的@Path里的/rws去掉,因为Servlet映射已经帮你处理了这个前缀:

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

web.xml保持你的原有配置就行:

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

现在请求localhost:8080/mesh/rws/menu/isAlive就会正确匹配:/rws(Servlet映射) + /menu/isAlive(注解路径),服务就能正常返回了。

办法二:用jboss-web.xml配置,避开重复参数冲突

如果你不想改代码里的注解,那就别在web.xml里加前缀参数,改用JBoss专属的jboss-web.xml来配置。在项目的WEB-INF目录下创建这个文件(没有的话新建),内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_7_0.xsd"
           version="7.0">
    <context-param>
        <param-name>resteasy.servlet.mapping.prefix</param-name>
        <param-value>/rws</param-value>
    </context-param>
</jboss-web>

这样JBoss会优先读取这个文件里的配置,不会和内置的参数冲突,同时Resteasy能正确识别/rws作为前缀,你的@Path("/rws/menu")和servlet-mapping/rws/*就能配合工作了。

最后验证

重启JBoss,再访问目标URL,应该就能看到"I am alive"的正常响应了。

内容的提问来源于stack exchange,提问作者Aaron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:31:09