我正在尝试使用这样的路径,最后一个参数是可选的,所以如果它存在则使用它,否则它只是设置为null或空。
@Path("/create/{param1}{param2:(/param2/[^/]+?)?}")
然而,当设置第一个静态参数时,我得到200,但是当设置第二个选项参数时,我得到404(未找到)。
例如,这失败了404:
http://hostname/create/abc1/abc2
并以200:
成功http://hostname/create/abc1
我对泽西岛无法匹配的可选路径做错了什么?
答案 0 :(得分:3)
虽然我确定这个问题有解决方案,但我通过重载方法来解决它,以便将一个param发送到一个接收方法,并将两个params发送到另一个。然后他们都交给处理程序方法,以便减少代码重复。 这可以使用简单的java重载,并且不需要复杂的匹配语法,这将使以后的维护更容易。
@PUT
@Path("/create/{param1}")
public Response doThingMethod(@PathParam("param1") String param1){
return passToHandler(param1, null)
}
@PUT
@Path("/create/{param1}/{param2}")
public Response doThingMethod(@PathParam("param1") String param1, @PathParam("param2") String param2){
return passToHandler(param1, param2)
}
希望这有助于其他人遇到同样的问题。