使用Jersey构建REST URI

时间:2012-09-12 19:48:43

标签: rest jersey

泽西岛的新手(REST Framework for Java),我正在尝试设置两个资源,在两个共享根路径的独立类中,我遇到了问题。 所以,我有类似的东西:

@Path("/users")
public class User extends RestSupport {

    @GET
    @Path("/{user_uuid}")
    public String get(@PathParam("user_uuid") String uuid) {    
        return "Hello User " + uuid;
    }
}

上述课程有效。但是,我想在单独的类中创建子资源。但是当我这样做时,它似乎创建了一个URI命名冲突。所以,在这里,我想获得特定用户的所有宠物

@Path("/users")
public class Pets extends RestSupport {

    @GET
    @Path("/{user_uuid}/pets")
    public String get(@PathParam("user_uuid") String uuid) {    
        return "Hello Pets " + uuid;
    }
}

这些顶级资源拥有大量子资源,因此我正在寻找组织它们的最佳方式。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果您希望Jersey将调用委托给子资源,请不要在@GET根资源方法上添加HTTP注释Users。考虑一个User类:

public class User {

  String uuid;
  User(String id) { this.uuid = id; }

  @GET
  public String get() { return "Hello user " + uuid; }

  @GET
  @Path("/pets")
  public String getPets() { return "Hello pets " + uuid; }

}

然后调整您的Users资源:

@Path("/users")
public class Users  {

  @Path("/{user_uuid}")
  public User get(@PathParam("user_uuid") String uuid) {
    // Get the user from the DAO here...
    return new User(uuid);
  }

}

答案 1 :(得分:1)

Pets课程的路径从@Path("/users")更改为@Path("/users/{user_uuid}/pets")