我正在努力提供三种类型的REST网址:
url/detail/3
(仅限整数)url/detail/hello
(仅限字符串)url/detail/3/1d
对于网址1和3,我使用的是method1
,而使用的是网址2 method2
。
问题1:所有请求类型1和2仅与方法2匹配。虽然我已经在方法1中为具有整数的查询指定了整数模式。
问题2:要使用可选参数(如3中所示)我使用的是method1,因为jersey没有为可选参数提供任何选项。但是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
}
答案 0 :(得分:1)
也许缺少的空白会导致问题。见Optional @PathParam in Jax-RS
您可以使用@DefaultValue("1000")
答案 1 :(得分:0)
您应该使用subresource。
,而不是复杂的正则表达式答案 2 :(得分:0)
@Path( “细节/ {ID} {时间perioid:?(/ [^ /] +)}”)
http://x.y.z:4080/analytics/internal/detail/kala
2014-01-17 07:35:50,509 [http-nio-4080-exec-8] INFO xxx - id:kala
2014-01-17 07:35:50,510 [http-nio-4080-exec-8] INFO xxx - 时间段:
和
http://x.y.z:4080/analytics/internal/detail/kala/123
2014-01-17 07:36:01,644 [http-nio-4080-exec-9] INFO xxx - id:kala
2014-01-17 07:36:01,645 [http-nio-4080-exec-9] INFO xxx - 时间段:/ 123
如果id可以是字符串或整数,我会在处理程序中验证它。