【问题标题】:Adding associated elements with Spring Data REST and Restangular使用 Spring Data REST 和 Restangular 添加关联元素
【发布时间】:2015-10-30 00:15:48
【问题描述】:

我正在为我的 REST API 使用 Spring data REST 命名方法。一些公开的资源如下所示:

课程实体: 本地主机:8080/数据/课程/

模块实体: 本地主机:8080/data/courseModules

每门课程可以有多个模块,所以我也有这个: localhost:8080/data/courses/{courseId}/modules - 与课程关联的模块列表。

如果我想添加新模块,我自然可以分两步完成:

  • 首先添加新模块(使用 POST 到 localhost:8080/data/courseModules)
  • 将新添加的模块与课程相关联(另一个 POST 到 localhost:8080/data/courses/{courseId}/modules)

问题是: 是否可以一步完成?我正在使用 Restangular,它的工作方式表明这应该是可能的。使用 Restangular 我会做这样的事情:

Restangular.one('courses', {courseId}).all('modules').post(newModule);

newModule 是 json 对象。

Restangular 比向地址发出 POST 请求:localhost:8080/data/courses/{courseId}/modules

这不管用。我收到“204 No Content”并且没有新对象添加到我的数据库中。我可以向这个地址添加新的 POST 模块:localhost:8080/data/courseModules 但如果我可以向 localhost:8080/data/courses/{courseId}/modules 发出这个请求会容易得多。我预计 Spring Data REST 会接受我对 localhost:8080/data/courses/{courseId}/modules 的 POST 请求,然后自动执行以下操作:

  1. 添加新模块
  2. 创建新模块与课程 ID {courseId} 的关联

提前感谢任何提示。

【问题讨论】:

    标签: angularjs spring rest restangular spring-data-rest


    【解决方案1】:

    问题的答案是。以下将是我想向您推荐的一种方法。 假设你有一个场景是

    1. 添加新课程和模块

    2. 删除现有模块。

    方案 1 的方法:

    端点 URL:localhost:8080/data/courses/ HTTP 方法:POST 请求正文将是 JSON/XML,其内容如下: 课程名称[Module1,Module 2.....]

    方案 2 的方法:

    端点 URL:localhost:8080/data/courses//id HTTP 方法:DELETE 该请求将包含必须删除的模块的 ID。 希望这能回答你的问题。如果您还有其他问题,请告诉我

    【讨论】:

    • 方案 2 的解决方案很明确。但是当涉及到场景一时,这并不是我真正想到的。你的建议意味着我必须扩展我的后端以公开一个可以处理这个问题的服务。这当然是可能的解决方案,但我正试图获得 Spring Data REST 的更多优势。因此,我想知道它是否会自动公开 POST 到 localhost:8080/data/courses/{courseId}/modules 的可能性,然后它会自动添加模块并将其与 ID 为“courseId”的课程相关联。
    猜你喜欢
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 2017-04-22
    • 2019-07-23
    • 2015-07-06
    • 2018-03-27
    • 2015-07-14
    • 2014-04-23
    相关资源
    最近更新 更多