43

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

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

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

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

我在这里做错了什么还是不可能以便携的方式完成这个?

4

4 回答 4

45

问题是冒号前缺少空格:

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

应该:

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

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

于 2011-03-29T11:36:31.820 回答
10

就我而言,我不得不使用其他表达式:

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

否则你必须清理参数。

于 2013-10-24T02:09:43.460 回答
2

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

于 2011-03-28T15:01:10.167 回答
-9

使用 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
于 2016-10-05T23:04:29.317 回答