3

我正在努力满足三种类型的 REST url:

  1. url/detail/3 (仅限整数)
  2. url/detail/hello (仅限字符串)
  3. url/detail/3/1d

对于 URL 1 和 3,我使用method1的是 URL 2 method2

问题 1: 1 和 2 的所有请求类型仅与方法 2 匹配。尽管我在方法 1 中为具有整数的查询指定了整数模式。

问题 2:要使用可选参数(如 3 中),我使用的是方法 1,因为球衣没有为可选参数提供任何选项。但是 url 类型url/detail/3/1d 永远不会按照方法 1 中的指定匹配。

请帮助我理解我做错了什么,因为我是球衣的新手。

@GET
@Path("/detail/{id: \\d+}/{time-period:(/time-period/[^/]+?)?}")

@Produces({ MediaType.APPLICATION_JSON })
@Consumes(MediaType.APPLICATION_JSON)
public JResponse method1(
        @Context HttpHeaders headers,
        @PathParam("id") String id,
        @PathParam("time-period") String timePeriod) {
    if(timePeriod == null || timePeriod.equals(""))
    {
        //code
    }
    else
      //code
}
@GET
@Path("/detail/{name}")
@Produces({ MediaType.APPLICATION_JSON })
@Consumes(MediaType.APPLICATION_JSON)
public JResponse method2(
        @Context HttpHeaders headers, @PathParam("name") String name) {
    //code
}
4

3 回答 3

1

也许缺少空格会导致问题。请参阅Jax-RS 中的可选 @PathParam

您可以定义参数的默认值@DefaultValue("1000")

于 2013-09-17T13:46:25.413 回答
0

您可能应该使用subresource而不是复杂的正则表达式。

于 2013-09-17T14:15:59.040 回答
0

@Path("detail/{id}{time-perioid:(/[^/]+?)?}")

http://xyz:4080/analytics/internal/detail/kala

2014-01-17 07:35:50,509 [http-nio-4080-exec-8] 信息 xxx - id: kala

2014-01-17 07:35:50,510 [http-nio-4080-exec-8] 信息 xxx - 时间段:

http://xyz:4080/analytics/internal/detail/kala/123

2014-01-17 07:36:01,644 [http-nio-4080-exec-9] 信息 xxx - id: kala

2014-01-17 07:36:01,645 [http-nio-4080-exec-9] 信息 xxx-时间段:/123

如果 id 可以是字符串或整数,我会在处理程序中验证它。

于 2014-01-17T07:44:40.643 回答