我有两个几乎相同的子资源:
@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