我的服务器在发送PUT请求时需要以下格式的json。我的服务器是一个使用struts2 rest插件设计的rest api。
{
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-server提交了null值。我需要覆盖或定制ember.js的序列化,但我不知道怎么做。
发布于 2019-10-15 09:06:45
这是Ember Data提供的序列化程序的职责之一。我猜您使用的是RestSerializer
,它通常与RestAdapter
一起使用,对吗?在这种情况下,您应该自定义serializeIntoHash()
method。完全不使用名称空间应该通过以下方式来实现:
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));
},
});
如果你不支持IE 11,你不需要为assign
使用polyfill。在这种情况下,它将是:
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));
}
}
https://stackoverflow.com/questions/58388227
复制