Jax-RS中的可选@PathParam

时间:2011-03-24 14:57:06

标签: java regex jboss jax-rs resteasy

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

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

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

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

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

4 个答案:

答案 0 :(得分:41)

问题是结肠前缺少空格:

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

应该是:

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

显然这是一个错误,因为specification使冒号周围的空格可选。我还发现我不是第一个bitten by this bug

答案 1 :(得分:8)

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

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

否则你必须清理参数。

答案 2 :(得分:1)

验证是否已经使用/ mypath定义了一个接受不同方法的路径,这可能是您获得405(不允许方法)的原因。另外,当你有可选参数时,我想最好让它们成为查询参数。

答案 3 :(得分:-6)

使用Dropwizard 1.0和Java8,您可以使用Optional

@Path("/news")
getLastNews(@QueryParam("topicId") String topicId, @QueryParam("limit") Optional<Integer> limit) 

它将对两者做出回应

/news?topicId=123213?limit=200

/news?topicId=123213