如何防止在Angular HttpClient.post方法中发送空字段?

时间:2019-01-11 13:39:28

标签: angular angular-httpclient

当我要将信息作为post Method发送到我的Rest API时,Angular发送空字段,随后,我的数据库保存了空值。

但是我想阻止它,并且我不想将空字段从Angular发送到后端。

例如,在下面的示例中,Angular在entityTypeName字段中发送一个“”,不幸的是,Postgres DB将保存为空而不是null。

{ 
   createdAt: "2019-01-11T13:59:52.311678"
   entityTypeName: ""
   id: "1bd46fce-fc6f-410f-acaf-74d5964cf92b"
   updatedAt: "2019-01-11T13:59:52.311678"
   updatedBy: "admin@admin.com"
   version: 0 
}

我正在寻找一种通用的解决方案,以防止在所有情况下都在Angular端发送强度值。

2 个答案:

答案 0 :(得分:2)

这是一个执行此操作的函数。只需将您的对象提供给该函数,它将删除空键。

function removeEmptyStringsFrom(obj) {
  const clone = { ...obj };
  Object.entries(clone).forEach(([key, val]) => val === '' && delete clone[key]);
  return clone;
}

const test = {
  notEmpty: 'toto',
  empty: '',
};

console.log(removeEmptyStringsFrom(test));

编辑:接受挑战!

const removeEmptyStringsFrom = (obj) => Object
  .entries({ ...obj })
  .filter(([key, val]) => val !== '')
  .reduce((prev, curr) => ({ ...prev, [curr[0]]: curr[1] }), {});

const test = {
  notEmpty: 'toto',
  empty: '',
};
    
console.log(removeEmptyStringsFrom(test));

答案 1 :(得分:0)

由于您没有提供任何示例,因此我将基于您在体内传递对象的实例(让其命名为entity)并由HttpClient处理序列化为json。

如果要使用空字符串删除属性,则可以删除该属性

delete entity.entityTypeName

对于将删除所有空字符串属性的通用解决方案,您可以使用HttpInterceptor

  • 检查传出的httpRequest是否包含json正文
  • 反复浏览所有属性(或特定属性)
  • 删除那些声明为空字符串的