【问题标题】:Structuring REST URI's with Jersey使用 Jersey 构建 REST URI
【发布时间】:2012-09-13 12:50:55
【问题描述】:

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

@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;
    }
}

这些顶级资源有很多子资源,所以我正在寻找组织它们的最佳方式。任何帮助将不胜感激。

【问题讨论】:

标签: rest jersey


【解决方案1】:

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

【讨论】:

  • 这似乎是显而易见的答案,我在发布之前尝试这样做。它因某种神秘的错误而失败;然而,我又试了一次,确保我清理了我的构建,并且它工作......
【解决方案2】:

如果您希望 Jersey 将调用委托给子资源,请不要在您的 Users 根资源方法上添加 HTTP 注释 @GET。考虑一个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);
  }

}

【讨论】:

  • 令我感兴趣的是用户上没有@Path。 Jersey 是否将路径默认为类的名称?那里的算法是什么?我一直试图在泽西岛的文档中找到它,但我不能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
  • 2019-04-21
  • 2016-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多