Angular 未收到 spring 引导中 HttpServletResponse.sendErro() 方法设置的状态代码

Angular is not receiving the status code set by HttpServletResponse.sendErro() method in spring boot

如果用户未登录,我将发送未经授权的状态代码 (401) 和一条消息 spring 启动应用程序,如果我们用邮递员测试它,该过程工作正常,但是,它没有与 angular.

一起工作

例如:

有个API

http://localhost:8080/api/alarms?page=0&size=20

邮递员:

{
"timestamp": "2022-05-08T09:40:52.454+00:00",
"status": 401,
"error": "Unauthorized",
"path": "/api/alarms"
}

Angular:

如果我们从 angular 应用程序调用相同的 API,它会给出错误,但错误消息和状态代码不相同

{
"headers": {
    "normalizedNames": {},
    "lazyUpdate": null,
    "headers": {}
},
"status": 0,
"statusText": "Unknown Error",
"url": "http://localhost:8080/api/alarms?page=0&size=20",
"ok": false,
"name": "HttpErrorResponse",
"message": "Http failure response for http://localhost:8080/api/alarms?page=0&size=20: 0 Unknown Error",
"error": {
    "isTrusted": true
}

}

服务器端代码:

    @Override
public void commence(HttpServletRequest request, HttpServletResponse response,
                     AuthenticationException authException) throws IOException {
    response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "unauthorized");
}

如何在angular应用程序中捕获服务器端指定的状态码和消息?

要在 angular 应用程序中捕获 sever-side 上指定的状态代码和消息,您可以在 angular 应用程序中使用 HTTP 拦截器处理此问题以处理所有全局错误在您的申请中。

请参考以下链接

Http interceptor for global error handling

Another link for global error handling

问题已解决:

问题其实是CORS问题,解决问题可以参考this answer.