我有一个服务,其中路径的最后部分是可选的,用户可以输入 / mypath / 和 / mypath / param1 / 。
我尝试使用正则表达式来过滤路径的最后部分:
@Path("/mypath{param1: (/param1)?}")
我正在使用RestEasy作为我的JAX-RS提供程序,代码在Tomcat中按预期工作,但是当我在JBoss中部署它时,当我不提交可选部分时,我得到405返回代码。
我在这里做错了什么,或者不可能以便携的方式实现这个目标?
答案 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