Мне нужно настроить сериализатор в адаптере ember.js - PullRequest
1 голос
/ 15 октября 2019

Мой сервер нуждается в json в следующем формате при отправке запроса PUT. Мой сервер представляет собой API-интерфейс rest, разработанный с использованием модуля отдыха struts2.

{
id: "5",
empId: "5",
firstName: "oki", 
lastName: "iko", 
edQual: "phd"
}
but the RESTAdapter serializes it to
[
employees:
 {
  id: "5", 
  empId: "5", 
  firstName: "oki", 
  lastName: "iko",
  edQual: "phd"
 }
]

Я пытался игнорировать свойства в бэкэнде, но он просто игнорировал весь json и отправлял нулевые значения на sql-сервер. Мне нужно переопределить или настроить сериализацию ember.js, но я не знаю, как.

1 Ответ

2 голосов
/ 15 октября 2019

Это одна из обязанностей Сериализатора, предоставляемого Ember Data. Я полагаю, вы используете RestSerializer, который обычно используется вместе с RestAdapter, не так ли? В этом случае вам следует настроить метод serializeIntoHash() . Просто не использовать пространство имен следует:

import RESTSerializer from '@ember-data/serializer/rest';

export default RESTSerializer.extend({
  serializeIntoHash(data, type, record, options) {
    data = this.serialize(record, options);
  }
});

Чтобы не потерять данные, которые уже присутствуют в hash, вы можете использовать Object.assign(). Это также то, что сделано в JSONSerializer:

import { assign, merge } from '@ember/polyfills';

const emberAssign = assign || merge;

export default RESTSerializer.extend({
  serializeIntoHash(hash, typeClass, snapshot, options) {
    emberAssign(hash, this.serialize(snapshot, options));
  },
});

assign || merge необходим только для поддержки очень старых версий ember. Вы можете упростить до:

import { assign } from '@ember/polyfills';

export default RESTSerializer.extend({
  serializeIntoHash(hash, typeClass, snapshot, options) {
    assign(hash, this.serialize(snapshot, options));
  },
});

Вам не нужно использовать polyfill для assign, если вы не поддерживаете IE 11. В этом случае это будет:

export default RESTSerializer.extend({
  serializeIntoHash(hash, typeClass, snapshot, options) {
    Object.assign(hash, this.serialize(snapshot, options));
  },
});

А с нативным классом это выглядит так:

export default class ApplicationSerializer extends RESTSerializer {
  serializeIntoHash(hash, typeClass, snapshot, options) {
    Object.assign(hash, this.serialize(snapshot, options));
  }
}
...