@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
相关产品推荐
相关产品推荐

