Jax-RS 中的可选 @PathParam
Posted
技术标签:
【中文标题】Jax-RS 中的可选 @PathParam【英文标题】:Optional @PathParam in Jax-RS 【发布时间】:2011-07-22 05:20:38 【问题描述】:我有一个服务,其中路径的最后一部分是可选的,用户可以输入 /mypath/ 和 /mypath/param1/。
我尝试使用正则表达式过滤路径的最后一部分:
@Path("/mypathparam1: (/param1)?")
我使用 RestEasy 作为我的 JAX-RS 提供程序,并且代码在 Tomcat 中按预期工作,但是当我在 JBoss 中部署它时,如果我没有提交可选部分,则会收到 405 返回码。
我在这里做错了什么还是无法以便携的方式完成此操作?
【问题讨论】:
See Also 【参考方案1】:验证是否已经使用 /mypath 定义了一个接受不同方法的路径,这可能是您返回 405(不允许方法)的原因。另外,当您有可选参数时,我想最好将它们设为查询参数。
【讨论】:
这是我得到的错误。我在 / 有一个GET
,在 /filename 有一个 POST
,其中文件名是可选的。所以 GET 和 POST 的帖子发生了冲突。【参考方案2】:
问题是冒号前缺少空格:
@Path("/mypathparam1: (/param1)?")
应该是:
@Path("/mypathparam1 : (/param1)?")
显然这是一个错误,因为specification 使冒号周围的空格是可选的。我也发现我不是第一个bitten by this bug。
【讨论】:
在我的情况下不起作用,但 this 可以 @NeerajJain 我的问题涉及 RestEasy,您链接的问题是关于泽西岛的。【参考方案3】:在我的例子中,我不得不使用这个其他的表达方式:
@Path('/mypath/param1 : (\\w+)?')
否则你必须清理参数。
【讨论】:
【参考方案4】:使用 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
【讨论】:
这是关于@Path
而不是@QueryParam
以上是关于Jax-RS 中的可选 @PathParam的主要内容,如果未能解决你的问题,请参考以下文章