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

@Path正则表达式仅匹配两条路由之一引发404问题

解决Dropwizard正则路由匹配异常问题

问题原因

你配置的GET路由/{path: apps/affiliate/v1/redirect|api/affiliate/v1/redirect}无法匹配/apps/affiliate/v1/redirect,核心是正则写法不符合Jersey(Dropwizard依赖的JAX-RS实现)的路径匹配规则:Jersey的路径参数正则默认按路径段(斜杠分隔的部分)处理,原正则中跨段的分支匹配逻辑存在歧义,导致apps前缀的路径无法被正确识别。

可行解决方案

方案1:直接声明多路径注解(最直观)

Jersey支持在同一个资源方法上添加多个@Path注解,直接指定两个目标路径,完全规避正则匹配的问题:

@GET
@Path("/apps/affiliate/v1/redirect")
@Path("/api/affiliate/v1/redirect")
public Response handleRedirect() {
    // 业务逻辑代码
    return Response.ok().build();
}

方案2:优化正则复用公共路径

如果两个路径只有前缀不同,可通过正则匹配前缀部分,复用后续公共路径,写法更简洁:

@GET
@Path("/{prefix:apps|api}/affiliate/v1/redirect")
public Response handleRedirect(@PathParam("prefix") String prefix) {
    // 可选:根据prefix区分处理逻辑
    return Response.ok().build();
}

方案3:修正完整路径正则的写法

若必须保留完整路径的正则匹配,需给正则分支加上括号明确匹配范围,避免引擎解析歧义:

@GET
@Path("/{fullPath: (apps|api)/affiliate/v1/redirect}")
public Response handleRedirect(@PathParam("fullPath") String fullPath) {
    return Response.ok().build();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:24:22