在 Angular 调用 java Web API 中为 http.post 传递参数



我有一个奇怪的情况,可能是因为我错过了一些我没有意识到或不知道的东西。 我正在使用 Angular 创建一个简单的登录 UI,并调用用 java 创建的 Web API。

java web API 函数如下

@RequestMapping(value = "/logon", method = RequestMethod.POST, produces = {"application/json"})
@ResponseBody
public String logon(
@RequestParam(value = "userID", required = true) String userID,
@RequestParam(value = "password", required = true) String password,
HttpServletRequest request)

现在,如果我按如下方式使用 http.post

login(username: string, password: string) {
return this.http.post(this.url+"/security/logon/", 
JSON.stringify({ userID: username, password: password }) )

然后我在谷歌浏览器浏览器中收到以下错误:

POST http://localhost:8080/logon/ 400 (Required String parameter 'userID' is not present)

但是如果我按如下方式更改代码:

login(username: string, password: string) {
var usrpwd = "userID=" + username + "&password=" + password;
return this.http.post(this.url+"/security/logon?"+usrpwd, usrpwd )

它完美地工作。 我错过了什么吗?为什么应该是传递的参数的 http.post 的第二个参数似乎不起作用?

提前感谢您的任何回复或反馈。

您正在使用两个必需参数定义终结点 url,并且这些参数必须在 url 中(查看此处(,因此当您向终结点发出请求时,URL 必须是:

http://localhost:8080/logon?userID=yourUserId&password=yourUserPassword

在第一个实现中,您不会将查询参数添加到 url,因此会向 urlhttp://localhost:8080/logon/发出请求,因为它没有必需的参数,您的 Web 层将返回 400 http 代码,这意味着请求错误(因为同样,您的 url 不包含必需的参数(。

constructor(private http:HttpClient({

}

login(usrName,usrPwd({

let body = {userName:usrName, userPwd:usrPwd}; this.http.post("http://localhost:5000/security/login", body) .subscribe( res => console.log(res), error => console.log(error) ) }

相关内容

  • 没有找到相关文章

最新更新