@Path regexp中的Jaxrs(RESTEasy)多个子资源

时间:2019-03-12 10:41:23

标签: java regex rest jax-rs resteasy

我在使用regex @Path参数时遇到了一个小问题。我正在尝试匹配路径a或b。我一直在尝试使用:

@Path("/{a: path\\/to\\/resource|resource}")

这样

  

http://localhost:1111/path/to/resource

  

http://localhost:1111/resource

都将执行相同的方法。当我使用两个正斜杠时,我的问题似乎出现了。我只能使用

访问该方法
  

http://localhost:1111/resource

但另一个不行。

但是在做的时候

@Path("/{a: path\\/resource|resource}")

它按预期工作,我可以使用

访问该方法
  

http://localhost:1111/path/resource

  

http://localhost:1111/resource

我尝试做一个否定的前瞻,以排除查询的第一部分,只返回公共属性(资源):

@Path("/{a: (?!path\\/to\\/)resource}")

但是那也不起作用。它与我的第一个实现具有相同的效果,我只能访问/ resource。

我也尝试过:

@Path("/{a: (path\\/to)?}{b: (\\/)?}resource")

按预期工作,但如果我查询也可以工作

  

http://localhost:1111/path/toresource

  

http://localhost:1111//resource

当我只希望有两个URL时,创建四个URL。

我是否缺少与正斜杠有关的内容,为什么我的正则表达式模式不能包含多个正斜杠?

1 个答案:

答案 0 :(得分:0)

我想我可能已经找到了问题的原因。

我还有其他几个路径,它们使用相同的URL(/ path / to / resource)使用不同的HTTP方法(GET,PUT,DELETE)。我怀疑它在执行正则表达式之前试图将path / to / resource与这些方法之一进行匹配。我对此表示怀疑的原因是,当我将POST方法重命名为:

@Path("/{a: (notPath\\/to\\/)?}resource"}

它按预期工作。我都能从两个人那里得到回复

  

localhost:1111 / notPath / to / resource

  

localhost:1111 /资源