【发布时间】:2015-10-29 21:30:47
【问题描述】:
好的,这就是我的困境。 (对不起,解释太长了,只是想尽可能清楚地说明这个案例)
我正在开发一个使用 Play Framework 制作的 restfull api。问题是我找到了两种可能的方法来呈现来自 Play 的 JSON 响应。 renderJSON 和 renderJSON2。
假设我向 /students 发出 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方法返回的内容同时使用两种渲染方法? 这有什么标准吗?
在此先感谢,很抱歉发了这么长的帖子。
【问题讨论】:
-
results应该是一个数组,而不是一个大对象
标签: json angularjs rest playframework restangular