大家都是怎么用spring aop来做业务异常处理的?

leetao881212 2016-09-26 10:21:15
业务代码中会有大量自定义的异常会在业务层抛出,来标识各种特定的业务错误,这些异常对于业务层以上的api层而言,肯定是需要定义为checked异常的,需要处理。但是同时由于服务间都是通过RPC调用,其他服务不会关心这些异常或者说不希望通过抛出异常的方式来得知各种异常情况,因此需要在api层处理掉这些异常。

因为有aop的存在,很自然地想到用aop来统一处理各种异常。但是aop是在运行时生效,编译的时候如果api层不处理这些异常,编译器自然是通不过的。解决方案就是:. 将自定义的异常都定义为RuntimeException,但是这样感觉太暴力,也不是业务层希望看到了,违背了java健壮性的初衷,感觉怪怪的。

不知道大家有没有遇到类似问题,都是怎么解决的呢?
...全文
428 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
finemi 2016-09-28
  • 打赏
  • 举报
回复
并不觉得unchecked异常有什么不好,只要使用AOP全面拦截了的话,是否checked都无所谓的。可以在方法上通过注释@throws的方式申明出所有可能的异常。 如果要用checked异常,那么势必每层调用方法都必须throws强制申明所有这些异常。
hersing 2016-09-26
  • 打赏
  • 举报
回复
引用 3 楼 leetao881212 的回复:
[quote=引用 1 楼 hersing 的回复:] 不知道你具体的需求是用来做什么,我在项目中捕获异常是用来定位异常来方便查找错误,通过自定义注解来实现异常日志入库
我的主要的异常处理的逻辑是根据不同的业务异常,获取到不同的返回码,set到RPC的返回对象当中。 实现这个功能是很简单,只是在纠结用RuntimeException不太舒服,想看看大家有没有什么思路[/quote] 这种的话应该挺简单的,只是你在纠结返回码的提示吧,可以参考下restful api
leetao881212 2016-09-26
  • 打赏
  • 举报
回复
引用 2 楼 fangmingshijie 的回复:
统一的异常处理可以用aop去实现,有特殊逻辑处理的,最好还是在业务侧处理。
我已经把异常处理设计得比较统一的,有一层抽象的异常在,我问题中提到的异常都是在这个抽象模型下的,放在aop里面处理还是不错,只是在纠结RuntimeException这个解决方案路子有点野 。
leetao881212 2016-09-26
  • 打赏
  • 举报
回复
引用 1 楼 hersing 的回复:
不知道你具体的需求是用来做什么,我在项目中捕获异常是用来定位异常来方便查找错误,通过自定义注解来实现异常日志入库
我的主要的异常处理的逻辑是根据不同的业务异常,获取到不同的返回码,set到RPC的返回对象当中。 实现这个功能是很简单,只是在纠结用RuntimeException不太舒服,想看看大家有没有什么思路
  • 打赏
  • 举报
回复
统一的异常处理可以用aop去实现,有特殊逻辑处理的,最好还是在业务侧处理。
hersing 2016-09-26
  • 打赏
  • 举报
回复
不知道你具体的需求是用来做什么,我在项目中捕获异常是用来定位异常来方便查找错误,通过自定义注解来实现异常日志入库

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧