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

如何配置javax.ws.rs.Path仅拦截项目根路径且不影响其他路径匹配

问题原因

你当前配置的JAX-RS Servlet映射规则/*会将所有请求都交给JAX-RS处理,而根路径资源类的路径匹配规则优先级高于未注册的子路径,导致所有子路径请求都被根资源类拦截。

解决方案

方案一:使用Servlet根路径专属映射(推荐)

Servlet规范提供了专门匹配应用上下文根路径的配置,仅会匹配根路径请求,不会拦截任何子路径,完全符合你不需要后缀、仅根路径交给JAX-RS处理的需求。
修改后的web.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    version="3.1">
    <servlet>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <!-- 空pattern仅匹配应用根路径,不会拦截任何子路径 -->
        <url-pattern></url-pattern>
    </servlet-mapping>
</web-app>

你的RestVersion相关代码不需要做任何修改,根路径请求会正常返回JSON结果,/asd等子路径会由对应注解的类或其他Servlet处理。


方案二:保留全局匹配,调整资源规则

如果你需要所有请求都走JAX-RS Servlet(比如所有接口都由JAX-RS实现),可以做两处调整:

  1. 调整RestVersion的路径注解,避免全局匹配:
// 去掉类上的@Path("/"),仅保留方法上的@Path("/")即可,或者将类路径设为空
public class RestVersion implements IRestVersion{
    @EJB
    private VersionBean versionBean;
    
    @Override
    public VersionInfo version() {
        return versionBean.getVersion();
    }
}
  1. 在web.xml中添加JAX-RS扫描配置,确保所有带@Path注解的类都被正确注册:
<servlet>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <init-param>
        <!-- 不同JAX-RS实现的参数名略有差异,以下是Jersey的配置,RESTEasy可改为resteasy.scan -->
        <param-name>jersey.config.server.provider.packages</param-name>
        <!-- 替换为你自己的资源类所在的包路径 -->
        <param-value>com.yourproject.resources</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

JAX-RS默认遵循最长路径优先匹配规则,只要@Path("/asd")的类被正确扫描,对应路径的请求会优先匹配到该类,不会落到根路径的处理方法上。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:15:03