我有一个使用弹簧引导创建的服务器项目,该项目返回带有字符串的ResponseEntity
以发布请求。我希望我的角度应用程序根据响应状态做出反应。
this.httpClient.post(
'http://localhost:8080/users',
{
"username": username,
"email": email,
"password": password
},
{
observe: 'response'
})
.subscribe(response => {
if (response.status === 200) {
alert('Hello!');
}
});
但是,使用上面的代码,我收到一个错误记录到控制台,通知:
"Http failure during parsing for http://localhost:8080/users"
(status is 200 as expected but alert does not work).
我知道我可以将帖子的第三个参数更改为
{responseType: 'text'}
并摆脱错误,但我不知道获取此类响应的状态代码。
有没有办法做到这一点?
对subscribe
的第一个回调称为next
回调,每当可观察量发出值时都会调用该回调。如果出现错误,则调用error
回调,可以将其作为subscribe
的第二个参数提供(还有其他替代方法(。不使用responseType: 'text'
时看不到alert
触发的原因是,在出现错误时不会调用您提供的回调函数。
正如我已经建议的那样,一种选择是提供错误回调。下面是一个示例:
this.httpClient.post(
'http://localhost:8080/users',
{ username, email, password },
{ observe: 'response' })
.subscribe(
response => {
// Only called for success.
...
},
errorResponse => {
// Called when there's an error (e.g. parsing failure).
if (errorResponse.status === 200) {
alert('Hello (for real this time)!');
}
});
在这里重新阅读原始问题后,我认为您的真正问题可能只是您没有将responseType: 'text'
和observe: 'response'
结合起来。如下所示:
this.httpClient.post(
'http://localhost:8080/users',
{ username, email, password },
{ observe: 'response', responseType: 'text' })
.subscribe(response => {
if (response.status === 200) {
alert('Hello!');
}
});
if (parseInt(response.status) === 200)
由于response.status
是字符串,因此您无法使用 === 运算符进行检查,因为该运算符同时检查类型和值。