我在使用正则表达式 @Path 参数时遇到了一个小问题。我正在尝试匹配路径a或b。我一直在尝试使用:
@Path("/{a: path\\/to\\/resource|resource}")
所以要么
或
都会执行相同的方法。当我使用两个正斜杠时,我的问题似乎出现了。我只能使用
访问该方法但不是另一个。
但是在做时:
@Path("/{a: path\\/resource|resource}")
它按预期工作,我可以使用
访问该方法或
我尝试执行否定前瞻来排除查询的第一部分,并仅返回公共(public)属性(资源):
@Path("/{a: (?!path\\/to\\/)resource}")
但这也不起作用。它与我的第一个实现具有相同的效果,我只能访问/resource。
我也尝试过:
@Path("/{a: (path\\/to)?}{b: (\\/)?}resource")
它按预期工作,但如果我查询也有效
或
因此,当我只想有两个入口 URL 时,创建了 4 个入口 URL。
我是否遗漏了一些与正斜杠有关的内容,为什么我的正则表达式模式不能包含多个正斜杠?
最佳答案
我想我可能已经找到了问题的原因。
我有几个其他路径,它们使用相同的 URL (/path/to/resource),具有不同的 HTTP 方法(GET、PUT、DELETE)。我怀疑它在执行正则表达式之前尝试将路径/到/资源与这些方法之一进行匹配。我对此怀疑的理由是,当我将 POST 方法重命名为:
@Path("/{a: (notPath\\/to\\/)?}resource"}
它按预期工作了。我能够得到双方的回复
localhost:1111/notPath/to/resource
和
localhost:1111/resource
关于java - Jaxrs (RESTEasy) @Path regexp 中的多个子资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55119503/