覆盖泽西岛的@Path

时间:2010-04-21 09:02:12

标签: java path jersey

我一直在尝试制作一个Jersey应用程序,它从路径中采用以下结构:

示例1(http://由于stackoverflow限制而省略) example.com/source/{source-id}/ example.com/source /

使用代码(错误处理和不需要的代码省略):

使用代码(总结):

@Path("/source/")
public class SourceREST {
...
 @GET
 public Response getSource() {
  return Response.ok("Sources List (no field)").build();
 }

 @GET
 @Path("/{source-id}")
 public Response getSource(@PathParam("source-id") String sourceID) {
  return Response.ok("Source: " + sourceID).build();
 }

}

工作正常。

示例2: example.com/data/{source-id}/{info-id}/ example.com/data/{source-id} /

使用代码(错误处理和不需要的代码省略):

@Path("/data/")
public class DataREST {
...

 @GET
 @Path("/{source-id}")
 public Response getContext(@PathParam("source-id") String sourceID) {
  return Response.ok("Source: " + sourceID + " Last ContextInfo").build();
 }

 @GET
 @Path("/{source-id}/{data-id}")
 public Response getContext(@PathParam("source-id") String sourceID, 
   @PathParam("data-id") String dataID) {
  return Response.ok("Source: " + sourceID + " Data: " + dataID).build();

 }
}

在示例2中,我可以访问像example.com/data/111/222/这样的网址,但尝试获取hexample.com/data/111/会给我一个405错误代码(方法不允许)。我还尝试制作一个检查{data-id}是空的还是空白的整个方法,在这种情况下,如第一种方法那样处理请愿,但也不起作用。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

我只是将您的示例2粘贴到资源中,它似乎工作正常。我正在使用Jersey 1.1.5。

以下是我的测试结果。

http://localhost:8090/MyHealth/helloworld/111

Source: 111 Last ContextInfo

http://localhost:8090/MyHealth/helloworld/111/

Source: 111 Last ContextInfo

http://localhost:8090/MyHealth/helloworld/111/222

Source: 111 Data: 222

http://localhost:8090/MyHealth/helloworld/111/222/

Source: 111 Data: 222

答案 1 :(得分:0)

您可以尝试使用路径作为@Path("/data/{source-id}")等根资源。然后第一种方法只有@GET注释,而第二种方法只有@GET @Path("{data-id}")

更重要的是,我建议使用不同的方法名称(虽然它们可能会执行不同的操作),但我不确定这是否是导致问题的原因。