我控制的当前系统只是前端,即Angular 5(因此打字稿(。 后端应该无关紧要,但有一个团队,他们不会更改签名、错误处理等。 :/
问题是有一个搜索屏幕,其中只需要 1 个字段,所以当我尝试将 URL 发送到 Restful 后端时(实际上当我输入这个时......这不是真正的 Restful,是吗?
我的角度服务方法:
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);
}
基本上我所展示的是在上面的评论中。
如果参数为空或为空,则我不希望将其添加到发送到服务器控制器方法的参数列表中...
- 如果用户 = 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 语句检查空/空/未定义的情况下做到这一点?
first,last,user,eff,term,emp
事实证明,我误读了文档,HttpParams
不会自动删除空值。
但是,您可以使用数组函数来实现此目的:
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
也是错误的值——我不确定这是否会成为您的用例中的一个问题。