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的主要内容,如果未能解决你的问题,请参考以下文章

Java 中的可选 orElse 可选

Swift 中的可选值是啥?

JavaScript中的可选参数[重复]

参数 SwiftUI 中的可选绑定

println 中的可选(“var”)

TypeORM queryBuilder 中的可选参数