Jax-RS 中的可选@PathParam

2022-09-01 01:06:16

我有一个服务,其中路径的最后一部分是可选的,用户可以输入/mypath//mypath/param1/

我尝试使用正则表达式来过滤路径的最后一部分:

@Path("/mypath{param1: (/param1)?}")

我使用 RestEasy 作为我的 JAX-RS 提供程序,代码在 Tomcat 中按预期工作,但是当我在 JBoss 中部署它时,当我不提交可选部分时,我得到了一个 405 返回代码。

我在这里做错了什么,还是不可能以便携式方式完成此操作?


答案 1

问题是冒号前缺少空格:

@Path("/mypath{param1: (/param1)?}")

应该是:

@Path("/mypath{param1 : (/param1)?}")

显然这是一个错误,因为规范使冒号周围的空格成为可选。我还发现我不是第一个被这个错误咬伤的人


答案 2

在我的情况下,我不得不使用这个另一个表达式:

@Path('/mypath/{param1 : (\\w+)?}')

否则,您必须清理参数。