2

我一直在尝试制作一个 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/ 的 URL,但尝试获取 hexample.com/data/111/ 时会出现 405 错误代码(不允许使用方法)。我还尝试制作一个完整的方法来检查 {data-id} 是否为空或空白,在这种情况下,像第一种方法一样处理请愿书,但也不起作用。

任何的想法?

谢谢!

4

2 回答 2

1

我刚刚将您的示例 2 粘贴到一个资源中,它似乎工作正常。我正在使用泽西岛 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
于 2010-05-21T18:21:05.247 回答
0

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

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

于 2010-04-21T12:49:55.220 回答