Java 捕获所有可能的路径参数jax-rs-regex
要为Java 捕获所有可能的路径参数jax-rs-regex,java,regex,jax-rs,Java,Regex,Jax Rs,要为@Path(“”)设置什么正则表达式来捕获所有可能的路径参数深度(某些特定的路径将由其他方法处理除外) 比如: /{path1}/{path1}/{path1}/{path1}/{path1}/等等 尽管仍在映射这些: /create /read /update /delete 到其他Jax-rs资源方法 @Singleton @Path("/") public class MyRest { @GET @Path({pathParam}) /* This works */
@Path(“”
)设置什么正则表达式来捕获所有可能的路径参数深度(某些特定的路径将由其他方法处理除外)
比如:
/{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
}
首先,您可能无法捕获这些
/{path1}/{path1}/{path1}/{path1}/{path1}/{path1}/
,因为您无法仅用一个正则表达式匹配未定义数量的参数
这就是说,似乎使用的正则表达式引擎是java的引擎(非常符合逻辑)。所以你可以用它来确保你没有抓住你的关键词。所以我想你可以有这样的东西:
@Path("/{path: (?!create|read|update|delete).*}")
然后分割路径变量,使用“/”作为分隔符
仍然。你能不能先对函数进行排序,这样一般情况就可以最后检查了?我认为这是最简单的
那么您只需使用:
@Path("/{path: .*}")
这更容易,而且样板文件更少
编辑:准确地说,第一个不会匹配像“/create/anythingelse”这样的URL,因为它只是禁止拥有/create(当然,这同样适用于您的其他关键字)。我尝试使用检查,但失败了:输入不完整到底是什么给了您这个。糟糕的是,Jax-rs@Path映射覆盖了映射,我的意思是@Path(“{Path}”)可以共存于同一个@Path(“create”)中,我真的不知道问题出在哪里。我希望他们可以。不管怎样,你似乎忘记了第一个映射是基于方法完成的,所以在你的例子中,不可能有任何冲突。