3

设置什么正则表达式来@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
}
4

1 回答 1

17

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

也就是说,使用的正则表达式引擎似乎是 java 的引擎(非常合乎逻辑)。因此,您可以使用否定前瞻来确保您没有捕捉到您的关键字。所以我想你可以有这样的东西:

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

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

还是。您不能只订购您的功能,以便最后检查一般情况吗?我认为这是最简单的...

然后你只需要使用:

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

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

编辑:
准确地说,第一个不会匹配像“/create/anythingelse”这样的URL,因为它只是禁止拥有/create(当然同样的事情也适用于您的其他关键字)。

于 2013-04-08T12:46:22.407 回答