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

如何为同一个Jersey REST API类配置多个根访问路径

实现方法

完全可以实现,不需要重复编写业务逻辑,常用两种方案:

方案1:修改@Path注解匹配双路径(JAX-RS原生支持,改动最小)

直接调整类上的@Path注解,利用路径模板的正则可选匹配规则,让单个注解同时覆盖两种路径格式,示例:

// 正则(v1/)?表示该位置可匹配v1/前缀,也可为空
@Path("/{prefix:(v1/)?}{start}/resource")
public class ClassA{
    // 原有业务逻辑无需任何改动
    // 如果需要区分请求是否带v1前缀,只需在方法入参加@PathParam("prefix") String prefix即可
    // 带v1的请求prefix值为"v1/",不带前缀的请求prefix值为空字符串
}

这个写法可以同时命中两个目标端点:

  • /v1/任意start值/resource
  • /任意start值/resource

方案2:编程式注册多路径(无需修改原有类注解)

如果不想改动资源类上的原有注解,可以在Jersey配置类(继承ResourceConfig的类)中,给同一个资源类绑定多个路径模板,示例:

@ApplicationPath("/")
public class AppJerseyConfig extends ResourceConfig {
    public AppJerseyConfig() {
        // 绑定原有带v1前缀的路径
        register(Resource.builder(ClassA.class)
                .path("/v1/{start}/resource")
                .build());
        // 绑定不带v1前缀的新路径
        register(Resource.builder(ClassA.class)
                .path("/{start}/resource")
                .build());
    }
}

这种方式完全不需要修改ClassA的原有代码,后续如果还要加新的路径映射,直接在配置里追加注册即可。

注意事项

两种方案都不会造成ClassA被重复实例化,Jersey会复用同一个资源类的处理逻辑,不会产生冗余的资源对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 06:12:59