一尘不染

没有JSON根的Ember.js REST适配器

json

Ember.js REST适配器期望JSON返回为:

{
    "person": {
        "first_name": "Barack",
        "last_name": "Obama",
        "is_person_of_the_year": true
    }
}

但是我的API返回的数据 没有根元素

{
    "first_name": "Barack",
    "last_name": "Obama",
    "is_person_of_the_year": true
}

是否可以自定义REST适配器,使其接受我的JSON数据?现在,它显示“ 断言失败:您的服务器返回了一个带有键0的哈希,但是您没有映射

更新: 根据下面的Sherwin
Yu的答案,这是我想出的,到目前为止似乎仍然有效:https
:
//gist.github.com/richardkall/5910875


阅读 208

收藏
2020-07-27

共1个答案

一尘不染

是的,您可以编写自己的自定义REST适配器。看一下JSONSerializerRESTSerializer(扩展了JSONSerializer)和REST适配器中的源代码。

基本上,您需要重写extract*JSONSerializer中的 方法。

当前,它看起来像这样:

extract: function(loader, json, type, record) {
  var root = this.rootForType(type);

  this.sideload(loader, type, json, root);
  this.extractMeta(loader, type, json);

  if (json[root]) {
    if (record) { loader.updateId(record, json[root]); }
    this.extractRecordRepresentation(loader, type, json[root]);
  }
},

注意它如何检查json[root]-您必须根据预期的API响应编写自定义方法。

另一种方法是“预处理”
API中的json以使用根元素。您可以通过找出要调用的方法extract*(将json传递给它)来做到这一点,然后再修改json以包含根元素。

希望这会有所帮助,如果不清楚,请告诉我。

2020-07-27