捕获所有可能的路径参数jax-rs regex

时间:2013-04-08 11:43:48

标签: java regex jax-rs

@Path("<what_regex>")设置的正则表达式是什么,以捕获所有可能的路径参数深度(除了某些特定路径,打算由其他方法处理)?

像:

/{path1}/{path1}/{path1}/{path1}/{path1}/依此类推

虽然仍然映射这些:

/create
/read
/update
/delete

其他Jax-rs资源方法。

@Singleton
@Path("/")
public class MyRest {
    @GET
    @Path({pathParam}) /* This works */
    public Response getSomething(...){}

    @POST
    @Path("create") /* Along with this */
    public Response createSomething(...){}

    // and so on
}

1 个答案:

答案 0 :(得分:17)

首先,您可能无法捕获这些/{path1}/{path1}/{path1}/{path1}/{path1}/,因为您只能使用一个正则表达式来匹配未定义数量的参数。

那就是说,似乎使用的正则表达式引擎是java的(非常合乎逻辑)。因此,您可以使用negative lookaheads来确保您没有抓住关键字。所以我想你可以有类似的东西:

@Path("/{path: (?!create|read|update|delete).*}")

然后拆分路径var,使用“/”作为分隔符。

<强>还是即可。难道你不能只是订购你的功能所以最后检查一般情况吗?我认为这是最简单的......

然后你只需要使用:

@Path("/{path: .*}")

这样更容易,而且样板更少。

修改
确切地说,第一个不匹配“/ create / anythingelse”之类的URL,因为它只是禁止拥有/创建(当然,同样的东西也适用于其他关键字)。