如何在 AngularJS 中捕获/处理后端异常
Posted
技术标签:
【中文标题】如何在 AngularJS 中捕获/处理后端异常【英文标题】:How to catch/handle backend exceptions in AngularJS 【发布时间】:2015-09-14 23:57:00 【问题描述】:我正在尝试通过使用 Spring MVC-Spring Security-AngularJS 构建一个小型 webapp 来学习 AngularJS。我的 UserDetailsService 在登录时抛出了 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
中添加另外两个字段(errorMessage
和errorCode
)例如。然后在您的角度回调中,您可以检查哪个是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 中捕获/处理后端异常的主要内容,如果未能解决你的问题,请参考以下文章