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

JAX-RS中@ApplicationPath如何配置支持v1/v2等多版本资源路径?

JAX-RS同时适配多版本前缀的两种可行配置方案

方案1:统一根路径,版本号下沉到资源类(适配成本最低)

直接修改现有ApplicationConfig的@ApplicationPath为根路径,将版本号写到各资源的@Path前缀中,无需额外配置:

  1. 修改全局应用配置:
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/")
@Component
public class ApplicationConfig extends Application {

}
  1. 调整资源类的@Path注解,补充对应版本前缀:
// v1版本资源
@Path("/v1/transaction")
public interface SpectrAPI {
    @POST
    @Path("/spectra")
    Response evaluatePlanningDecisions(final Request request); 
}

@Path("/v1/transaction")
public interface JupiterAPI {
    @POST
    @Path("/jupiter")
    Response evaluatePlanningDecisions(final Request request); 
}

// v2版本新增资源
@Path("/v2/payment")
public interface BlazeAPI {
    @POST
    @Path("/blaze")
    Response handlePayment(final Request request); 
}

方案2:注册多Application实例(适合多版本逻辑隔离场景)

如果v1、v2版本需要独立配置拦截器、序列化规则等能力,可以定义两个独立的Application子类,分别配置不同的@ApplicationPath前缀:

// v1版本专属应用配置
@ApplicationPath("/v1")
@Component
public class V1ApplicationConfig extends Application {
    // 可单独注册v1版本的资源、过滤器、拦截器
}

// v2版本专属应用配置
@ApplicationPath("/v2")
@Component
public class V2ApplicationConfig extends Application {
    // 可单独注册v2版本的资源、过滤器、拦截器
}

对应资源类无需再加版本前缀,自动归属到对应版本的上下文路径下:

// 归属于v1上下文的资源
@Path("/transaction")
public interface SpectrAPI {
    @POST
    @Path("/spectra")
    Response evaluatePlanningDecisions(final Request request); 
}

// 归属于v2上下文的资源
@Path("/payment")
public interface BlazeAPI {
    @POST
    @Path("/blaze")
    Response handlePayment(final Request request); 
}

注意:Spring集成JAX-RS场景下需要配置两个Application实例的资源扫描范围,避免重复扫描导致路径冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:57:04