如何在 AngularJS 中捕获/处理后端异常

Posted

技术标签:

【中文标题】如何在 AngularJS 中捕获/处理后端异常【英文标题】:How to catch/handle backend exceptions in AngularJS 【发布时间】:2015-09-14 23:57:00 【问题描述】:

我正在尝试通过使用 Spring MVC-Spring Security-AngularJS 构建一个小型 webapp 来学习 AngularJS。我的 UserDetailsS​​ervice 在登录时抛出了 UserNotFoundException。但我不知道如何在 Angular 中处理异常。我试图用谷歌搜索,但找不到关于异常处理的简单、完整的例子。

这是我的身份验证 Angular 模块的一部分:

                $http.get('user', 
                    headers : headers
                ).success(function(data) 
                    if (data.name) 
                        auth.authenticated = true;
                     else 
                        auth.authenticated = false;
                    
                    callback && callback(auth.authenticated);
                    $location.path(auth.path==auth.loginPath ? auth.homePath : auth.path);
                ).error(function() 
                    auth.authenticated = false;
                    callback && callback(false);
                );

如何在错误回调函数中获取并捕获这个特定的 UserNotFoundException?

【问题讨论】:

【参考方案1】:

我的建议是在您的控制器中创建@ExceptionHandler,并在您的UserNotFoundException 中添加另外两个字段(errorMessageerrorCode)例如。然后在您的角度回调中,您可以检查哪个是errorCode 号码。

好文章:

http://java.dzone.com/articles/exception-handling-spring-rest http://www.mkyong.com/spring-mvc/spring-mvc-exceptionhandler-example/

对于高级错误处理,我推荐这种行为:https://github.com/jirutka/spring-rest-exception-handler

这里是您的案例的一个示例:http://jsfiddle.net/bkUEu/1044/

【讨论】:

我在家的时候会看看它。看起来很有前途。谢谢! 没问题,如果您需要其他帮助,我在这里。请随时与我联系。【参考方案2】:

在你的应用 angularjs 中尝试使用这个

$http.get('user', 
                    headers : headers
                ).then(function(data) 
                    if (data.name) 
                        auth.authenticated = true;
                     else 
                        auth.authenticated = false;
                    
                    callback && callback(auth.authenticated);
                    $location.path(auth.path==auth.loginPath ? auth.homePath : auth.path);
                ).catch(function() 
                    auth.authenticated = false;
                    callback && callback(false);
                );

使用 then 和 catch 函数代替成功和错误。

【讨论】:

以上是关于如何在 AngularJS 中捕获/处理后端异常的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Chrome DevTools 在 AngularJS 异常中暂停脚本执行?

angularjs中jsonp请求的异常处理

drf自定义异常处理

SpringBoot项目中异常的捕获和处理

SpringBoot项目中异常的捕获和处理

springboot中添加全局异常捕获类