diff --git a/addons/api/addon/serializers/application.js b/addons/api/addon/serializers/application.js index 2819231fa..e4531c7fe 100644 --- a/addons/api/addon/serializers/application.js +++ b/addons/api/addon/serializers/application.js @@ -37,8 +37,11 @@ export default class ApplicationSerializer extends RESTSerializer { * @param {String} key * @param {Object} attribute */ - serializeAttribute(snapshot, json, key, { options }) { + serializeAttribute(snapshot, json, key, attribute) { + const { type, options } = attribute; let value = super.serializeAttribute(...arguments); + // Convert empty strings to null. + if (type === 'string' && json[key] === '') json[key] = null; // Do not serialize read-only attributes. if (options.readOnly) delete json[key]; // Version is sent only if it has a non-nullish value diff --git a/addons/api/tests/unit/serializers/application-test.js b/addons/api/tests/unit/serializers/application-test.js index 10de9d4fb..014d80377 100644 --- a/addons/api/tests/unit/serializers/application-test.js +++ b/addons/api/tests/unit/serializers/application-test.js @@ -70,6 +70,21 @@ module('Unit | Serializer | application', function (hooks) { }); }); + test('it serializes empty strings to null', function (assert) { + assert.expect(1); + const store = this.owner.lookup('service:store'); + const record = store.createRecord('user', { + name: '', + description: '', + version: null, + }); + let serializedRecord = record.serialize(); + assert.deepEqual(serializedRecord, { + name: null, + description: null, + }); + }); + test('it serializes non-nullish version fields', function (assert) { assert.expect(2); const store = this.owner.lookup('service:store');