我目前控制的系统只是前端,即 Angular 5(即 Typescript)。后端应该不重要,但是有一个团队,他们没有改变他们的签名,他们的错误处理等..:/
问题是有一个搜索屏幕,其中只需要 1 个字段,因此当我尝试将 URL 发送到 Restful 后端时(实际上当我输入此内容时......这并不是真正的 Restful,不是吗?)
我的 Angular 服务方法:
getSearchByUserResults(first,last,user,eff,term,emp) {
//IF I JUST DO THIS, THEN EMPTY PARAMS ARE SENT AND SOMEHOW THE BACKEND IS NOT SET UP TO HANDLE THAT :/
//var params = "userid=" + user + "&first-name=" + first + "&last-name=" + last + "&eff-date=" + eff + "&term-date=" + term + "&employee-id=" + emp;
//Sending only userid works
//var params = "userid=" + user;
// Send user and first when first name is empty(null) again it does NOT work
var params = "userid=" + user + "&first-name=" + first;
var searchUser = this._searchByUser + params;
return this._http.get(searchUser).map((response: Response) => response.json()).catch(this.handleError);
}
Basically what I am showing is in the comments above.
如果参数为空或为 null,那么我不希望将其添加到发送到服务器 Controller 方法的参数列表中...
- 如果用户 = 123 发送 http://server.com:9080//rest/config/users?userid=123
- 如果用户和名字不为空,发送 http://server.com:9080//rest/config/users?userid=123&first-name=Ted
- 切勿发送带有空参数的内容,例如空名字 http://server.com:9080//rest/config/users?userid=123&first-name=
根据该参数列表,如果没有一堆 if 语句检查 null/empty/undefined ,我该如何做到这一点?
第一个、最后一个、用户、eff、term、emp
最佳答案
事实证明,我误读了文档,并且 HttpParams
不会自动删除 null 值。
但是,您可以为此使用数组函数:
getParams(first,last,user,eff,term,emp): HttpParams {
let obj = {first, last, user, eff, term, emp};
return Object.keys(obj).reduce((params, key) =>
obj[key] ? params.append(key, obj[key]) : params, new HttpParams())
}
这将构建一个仅包含真实值的 HttpParams
对象,因此它将排除 null
/undefined
/空字符串等。
请记住,false
和 0
也是错误值 - 我不确定这是否会成为您的用例中的问题。
关于javascript - 仅当 Angular Typescript 不为空时才发送可选的 Restful url 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50772741/