jersey 2.6子资源中的可选路径参数,没有常量部分路径

时间:2018-01-15 12:29:26

标签: rest jersey

我有两个几乎相同的子资源:

@GET
@Path("/{device}/{property}")
@Produces(MediaType.APPLICATION_JSON)
public Response getParameterValue(@PathParam("device") final String device,
            @PathParam("property") final String property) {
   ...
}

@GET
@Path("/{device}/{property}/{field}")
@Produces(MediaType.APPLICATION_JSON)
public Response getFieldValue(@PathParam("device") final String device,
            @PathParam("property") final String property,
            @PathParam("field") final String field ) {
   ...
}

我想用正则表达式替换一个。我在其他相关的许多文章中都看到了这个问题,比如这个post和这个问题one。 所以我几乎肯定会像我这样写下子资源的目标:

@GET
@Path("/{device}/{property}{p:/?}{field:([a-zA-Z][a-zA-Z0-9_]*)?}")
@Produces(MediaType.APPLICATION_JSON)
public Response getParameterOrFieldValue(@PathParam("device") final String device,
           @PathParam("property") final String property,
           @PathParam("field") final String field ) {
   ...
}

不幸的是,如果字段路径参数存在值:

  

http://localhost:8080/my-rest/v1/device001/property001/field001

,我得到了:

  

不允许HTTP 405方法

但是如果字段没有值:

  

http://localhost:8080/my-rest/v1/device001/property001   它工作正常。

我在子资源的路径中引入了一个常量部分'just2C':

@GET
@Path("/just2C/{device}/{property}{p:/?}{field:([a-zA-Z][a-zA-Z0-9_]*)?}")
@Produces(MediaType.APPLICATION_JSON)
public Response getParameterOrFieldValue(@PathParam("device") final String device,
        @PathParam("property") final String property,
        @PathParam("field") final String field ) {
       ...
}  

它适用于两种情况:带或不带路径参数'field'的值。 我想说明为什么? 我正在使用jersey2.6

0 个答案:

没有答案