【问题标题】:Optional @PathParam in Jax-RSJax-RS 中的可选 @PathParam
【发布时间】:2011-07-22 05:20:38
【问题描述】:

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

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

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

我使用 RestEasy 作为我的 JAX-RS 提供程序,并且代码在 Tomcat 中按预期工作,但是当我在 JBoss 中部署它时,如果我没有提交可选部分,则会收到 405 返回码。

我在这里做错了什么还是无法以便携的方式完成此操作?

【问题讨论】:

标签: java regex jboss jax-rs resteasy


【解决方案1】:

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

【讨论】:

  • 这是我得到的错误。我在 / 有一个 GET,在 /{filename} 有一个 POST,其中文件名是可选的。所以 GET 和 POST 的帖子发生了冲突。
【解决方案2】:

问题是冒号前缺少空格:

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

应该是:

@Path("/mypath{param1 : (/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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 2012-06-23
    • 2016-03-23
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多