Jax-RS中的可选@PathParam

Fáb*_*bio 38 java regex jboss jax-rs resteasy

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

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

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

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

我在这里做错了什么,或者不可能以便携的方式实现这个目标?

Fáb*_*bio 41

问题是结肠前缺少空格:

@Path("/mypath{param1: (/param1)?}")
Run Code Online (Sandbox Code Playgroud)

应该:

@Path("/mypath{param1 : (/param1)?}")
Run Code Online (Sandbox Code Playgroud)

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

  • 在我的情况下没有工作,但[这](http://stackoverflow.com/a/32778643/3143670) (3认同)

aru*_*zca 8

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

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

否则你必须清理参数.