具有零个或多个路径参数的Resteasy @path

时间:2012-01-23 13:43:51

标签: java url resteasy

我在API开发中使用RESTEasy。我的网址为http://localhost:8080/project/player/Mhttp://localhost:8080/project/player

这意味着我将{gender}视为路径参数。

我的问题是如何将这个网址映射到REST方法,我使用下面的映射

@GET
@Path("player/{gender}")
@Produces("application/json")

但如果使用它,则会映射http://localhost:8080/project/player/M,但不映射http://localhost:8080/project/player。 我需要一个正则表达式来映射零个或多个路径参数

感谢。

4 个答案:

答案 0 :(得分:8)

是否有任何理由必须是路径参数而不是查询字符串?如果将其更改为使用后者,则可以使用@DefaultValue注释。

因此,您的代码将如下所示:

@GET
@Path("player") //example: "/player?gender=F"
@Produces("application/json")
public Whatever myMethod(@QueryParam("gender") @DefaultValue("M") final String gender) {
  // your implementation here
}

答案 1 :(得分:4)

路径参数(@PathParam)不是可选的。如果你想映射;

您需要两种方法。您可以使用方法重载;

@GET
@Path("player/{gender}")
@Produces("application/json")
public Whatever myMethod(@PathParam("gender") final String gender) {
  // your implementation here
}

@GET
@Path("player")
@Produces("application/json")
public Whatever myMethod() {
  return myMethod(null);
}

答案 2 :(得分:1)

请参阅以下链接,其中包含通过正则表达式

的可选路径参数示例

RestEasy @Path Question with regular expression

答案 3 :(得分:0)

如果要在路径中包含可选参数,则应使用正则表达式。

因此,您的代码将如下所示:

@GET
@Path("/player{gender : (/\\w+)?}")
@Produces("application/json;charset=UTF-8")
public Whatever myMethod(@QueryParam("gender") @DefaultValue("M") final String gender) {
  // your implementation here
}

有关详细信息,请参阅https://docs.jboss.org/resteasy/docs/1.1.GA/userguide/html/Using__Path_and__GET___POST__etc..html