java - RESTful 1-N 可选关系

标签 java json rest jaxb jersey

我正在尝试学习如何使用 Jersey 在 Java 中编写 RESTful 应用程序,并且 hibernate ,我正在努力了解如何处理父/子类型 将数据发布到资源时的关系。我正在使用 JSON 进行交换 数据,但我不认为这与我的问题特别相关。

我正在使用的示例模拟了员工和员工之间的关系 团队。一名员工可能是也可能不是一个团队的成员:

GET /team/ - returns a list of teams
POST /team/ - creates a new team
GET /team/1 - returns a list of employees in the team with the ID 1

GET /employee/ - returns a list of employees
POST /employee/ - creates a new employee
GET /employee/1 - returns details about the employee with the ID 1

在这之后,我有一些 Hibernate 注释的 POJO:一个用于团队,一个 对于员工,两者之间是 1-N 关系(记住 员工可能不是团队成员!)。同样的POJO也有注解 作为@XmlRootElements 以便 JAXB 允许我将它们传递到/从 作为 JSON 的客户端。

这两个实体的属性如下所示:

Team
    Long id;
    String name;
    String desc;
    List<Employee> employees;

Employee
    Long id;
    Team team;
    String name;
    String phone;
    String email;

到目前为止一切都很好。但我正在努力理解如何成为一名员工 在创建时通过传递团队 ID 成为团队成员,而不是 而不是在我的 JSON 对象中传递嵌套的团队对象。

例如,我希望能够使用 JSON 调用 POST/employee/ 看起来像这样:

{
    "team_id":"1",
    "name":"Fred Bloggs",
    "phone":"1234567890",
    "email":"test@example.com"
}

但是,相反,我必须传递这样的东西:

{
    "team":{
        "id":"1",
        }
    "name":"Fred Bloggs",
    "phone":"1234567890",
    "email":"test@example.com"
}

所以,我的问题是,其他人如何在不传递整个对象图的情况下处理在 JSON/REST 中创建关系?

抱歉,这是一个粗略的问题,但正如我所说,我才刚刚开始 出来,在这个阶段术语对我来说是个问题!

最佳答案

如果您的框架强制您的表示包含奇怪的结构,例如 { "id":"1"} 那么我认为是时候切换框架了!

更重要的是,与其担心将子 JSONObject 添加到您的代码中,不如担心术语“1”确实不是真正的超链接。如果需要,请阅读超媒体约束或 HATEOAS。

你想在你的 POST 中传递的是这样的:

{
    "team_href" : "/teams/1",
    "name":"can'tbebothered"
}

所以当服务器看到这个时,它会将新创建的员工与团队 #1 链接起来,仅仅是因为它识别(相对)URI。

关于java - RESTful 1-N 可选关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3534669/

相关文章:

java - 如何在对象列表中搜索对象的属性包含字符串

java - 需要逻辑解决不可数循环困境

java - 如何获取 JFileChooser 中的目录?

java - 使用 GSON 将 JSON 文件解析为 Java

java - Spring RESTful API 获取客户端信息

ruby-on-rails - 服务到服务认证、服务身份和访问权限管理

json - 改变子资源状态的 REST 方法

java - Dagger 2 没有生成类

java - Java中如何获取仅包含特定字段的对象列表?

php - 解码 json 文件时出现内部服务器错误