使用正则表达式在球衣上工作的可选参数

时间:2013-09-17 08:07:32

标签: java jersey jax-rs

我正在努力提供三种类型的REST网址:

  1. url/detail/3(仅限整数)
  2. url/detail/hello(仅限字符串)
  3. url/detail/3/1d
  4. 对于网址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
    }
    

3 个答案:

答案 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可以是字符串或整数,我会在处理程序中验证它。