好的,这就是我的困境。 (对不起这么长的解释,只是尽力为这个案子尽可能清楚)
我正在使用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方法返回的内容? 这有什么标准吗?
提前致谢并感谢抱歉。
答案 0 :(得分:0)
您可能需要使用renderJSON并向Restangular提供程序添加响应拦截器以解包接收到的对象并存储分页数据: