我有一个服务,路径的最后一部分是可选的,用户既可以输入/mypath/,也可以输入/mypath/param1/。
我试图使用正则表达式来过滤路径的最后一部分:
@Path("/mypath{param1: (/param1)?}")
我使用RestEasy作为我的JAX-RS提供者,在Tomcat中代码按预期工作,但当我在JBoss上部署它时,如果我不提交可选部分,我会收到405返回代码。
我在这里做错了什么,或者不可能以便携的方式完成这个任务?
我有一个服务,路径的最后一部分是可选的,用户既可以输入/mypath/,也可以输入/mypath/param1/。
我试图使用正则表达式来过滤路径的最后一部分:
@Path("/mypath{param1: (/param1)?}")
我使用RestEasy作为我的JAX-RS提供者,在Tomcat中代码按预期工作,但当我在JBoss上部署它时,如果我不提交可选部分,我会收到405返回代码。
我在这里做错了什么,或者不可能以便携的方式完成这个任务?
@Path("/mypath{param1: (/param1)?}")
应该是:
@Path("/mypath{param1 : (/param1)?}")
显然这是一个bug,因为规范中表示冒号周围的空格是可选的。我也发现我不是第一个被这个bug咬到的人。
param1
的值包含斜杠(/
)。有没有一种不需要在代码中手动切割斜杠的方法来不包含该斜杠呢? - AlikElzin-kilaka@Path('/mypath/{param1 : (\\w+)?}')
,否则您必须清除参数。请确认是否已经定义了一个接受不同方法的/mypath路径,这可能是您收到405(方法不允许)错误的原因。此外,当您拥有可选参数时,最好将它们设置为查询参数。
GET
请求和一个可选的文件名为参数的 POST
请求。因此,GET 和 POST 请求发生了冲突。 - QuirkyBit使用 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
。 - Zarathustra