从休息api

时间:2015-10-29 21:30:48

标签: json angularjs rest playframework restangular

好的,这就是我的困境。 (对不起这么长的解释,只是尽力为这个案子尽可能清楚)

我正在使用Play Framework制作一个restfull api。问题是我找到了两种可能的方法来从Play渲染JSON响应。 renderJSON和renderJSON2。

让我说我向/学生提出GET请求

在我的项目中,请求应该返回一组学生,它可能是一个学生或其中许多。事情是在后端我最终做了这样的事情

renderJSON(studentList)

studentList是一个java.utils.List。所以我在前端得到的json是这样的。

{
    paging: {
        total: 2
    }-
    results: [2]
        0:  {
            id: "33333333"
            email: "student1@test.com"
            name: "Bob"
        }-
        1:  {
            id: "444444444"
            email: "student2@test.com"
            name: "Jhon"
        }-
-
}

正如您所看到的,rednerJSON在这里做的是将学生列表放在具有"分页"的对象中。和"结果"结果实际上是我想要的属性。

现在另一方面,我测试了另一个叫做renderJSON2的方法,在同样的情况下,给了我这个结果。

[1]
    0:  {
        id: "33333333"
        email: "student1@test.com"
        name: "Bob"
    }
[2]
    0:  {
        id: "444444444"
        email: "student2@test.com"
        name: "Jhon"
    }

正如您在此方法中所看到的,我将普通学生列表作为回复,而不是嵌入到另一个对象中。

当我开始将Restangular module与AngularJs结合使用时,我的问题就出现了,因为restangular有特定的方法来进行api调用,返回一个对象或一组对象。你甚至在浏览器控制台中从restangular中得到一个错误,如果它期望一个对象并且它收到一个集合或反之亦然。

因此,如果我只使用renderJSON(),那么我将无法从restangular中获得最佳效果,因为它为我提供了一种直接的方法来获取和绑定对象集合到我的angularJs模型。这让我觉得在总是返回集合的api方法的情况下我应该使用renderJSON2。 唯一让我想使用renderJSON的是"分页"限制响应结果时,属性很有用。

处理此问题的最佳方法是什么?我是否应该在所有情况下使用renderJSON,甚至可能停止使用restangular,或者我应该使用两种渲染方法,具体取决于api方法返回的内容? 这有什么标准吗?

提前致谢并感谢抱歉。

1 个答案:

答案 0 :(得分:0)

您可能需要使用renderJSON并向Restangular提供程序添加响应拦截器以解包接收到的对象并存储分页数据:

https://github.com/mgonto/restangular/#my-response-is-actually-wrapped-with-some-metadata-how-do-i-get-the-data-in-that-case