我有以下2种方法...
@GET
@Path("/{solution}")
public Response test(@PathParam("solution") String solution,
@Context UriInfo uriInfo, @Context HttpHeaders headers);
@GET
@Path("/{solution}/{path:[a-z0-9/\\-]*}")
public Response testTest(@PathParam("solution") String solution,
@PathParam("path") String nodePath,
@Context UriInfo uriInfo, @Context HttpHeaders headers);
Run Code Online (Sandbox Code Playgroud)
当我调用/ my-app / test / test时,第二个方法被调用并且参数设置正确。当我调用/ my-app / test而不是第一个方法被调用时,我收到未找到的HTTP 405方法。我假设它正在将URL映射到其他方法之一,例如。
@DELETE
@Path("{path: [a-z0-9/\\-]*}")
public Response deleteTest(@PathParam("path") String path, @Context HttpHeaders headers);
Run Code Online (Sandbox Code Playgroud)
有人发现我做错了吗?任何人都可以找到jersey试图映射到的方法的任何提示?
谢谢。
使用上面定义的3种方法,您基本上有3种资源:
当Jersey将请求与资源方法匹配时,它首先确定应将其映射到哪个资源(即URI模式)。第三个是与请求URL匹配的最具体的一个,因此一个被匹配。只有那时Jersey才会查看是否为该资源处理了相应的HTTP方法。这符合JAX-RS规范-您可以在此处的规范中查看匹配算法的详细说明:http : //jsr311.java.net/nonav/releases/1.1/spec/spec3.html#x3- 360003.7.2
因此,您应该考虑逻辑资源,让URI模板与它们匹配,然后为这些资源实现相应的HTTP方法。也就是说,如果“ / {solution}”和“ / {solution} / {path:[a-z0-9 / \-] *}”在逻辑上是两个不同的资源,并且都应支持@DELETE,则应定义两个删除操作,一个使用第一个模板,另一个使用第二个URI模板。
| 归档时间: |
|
| 查看次数: |
2578 次 |
| 最近记录: |