提供Jersey中父资源的子资源链接

时间:2015-10-06 17:28:55

标签: java rest jersey jax-rs

我在Jersey中实现了RESTful服务,该服务由顶级资源和许多子资源组成。举例说明:

家长资源:

@Path("parent")
public class ParentResource {
   private SubResourceA subResourceA;
   private SubResourceB subResourceB;
   private SubResourceC subResourceC;

   public ParentResource() {
      subResourceA = new SubResourceA();
      subResourceB = new SubResourceB();
      subResourceC = new SubResourceC();
   }

   @Path("a")
   public SubResourceA getA() {
      return subResourceA;
   }

   @Path("b")
   public SubResourceB getB() {
      return subResourceB;
   }

   @Path("c")
   public SubResourceC getC() {
      return subResourceC;
   }

我正在寻找的是在ParentResource类上定义一个GET方法,该方法返回指向此类中所有可用子资源的链接(类似于文件系统中如果选择其中包含文件夹的文件夹,然后你会看到子文件夹)。

如果没有这样的实现,如果我点击GET / parent,那么我将从我的Web服务获得404。理想情况下,GET / parent应该给我一个SubResourceA,SubResourceB和SubResourceC的链接。

是否有人知道实施此类功能的标准惯例?特别是在JAX-RS / Jersey中,如果可能的话。

由于

1 个答案:

答案 0 :(得分:0)

您无需返回实例。您可以返回课程,让Jersey为您创建。你可以简单地做一些像

这样的事情
@Path("parent")
public class ParentResource {

    @Path("{x}")
    public Class getX(@PathParam("x") String x) {
        switch (x) {
            case "a": return SubResourceA.class;
            case "b": return SubResourceB.class;
            case "c": return SubResourceC.class;
            default: throw new WebApplicationException(404);
        }
    }

    public static class SubResourceA {
        @GET               // @PathParam is forwarded parent
        public String getA(@PathParam("x") String x) {
            return "A";
        }
    }
}
  

“我正在寻找的是在ParentResource类上定义一个返回所有子资源的链接的GET方法”

这破坏了定义Sub资源定位器方法的内容。它不应该使用任何HTTP方法注释进行注释。那些注释应该只在子资源类`方法中。