use*_*448 4 java exception-handling spring-mvc
我知道有很多关于异常处理的讨论,但是我需要一些针对我的情况的建议.
我目前正在开发一个Spring MVC带Controller->Services->DAO图层的应用程序.服务类主要捕获两种异常HibernateException和IOException.
HibernateException因为如果事务没有成功,服务需要执行回滚,IOException因为它是一个未经检查的异常,需要被捕获或抛出,我更喜欢第一个选项.
现在,在堆栈中进一步处理这些更好的方法是什么:
ExceptionHandler控制器中发送HTTP错误代码500JSON response对象,设置status=failure和相应的错误消息并将其返回给Controller?异常处理协议:
有一种说法,处理异常的最佳方法是不处理它!
对于层Spring的约定controller<->service<->dao,Exception处理机制被称为Bubble up.在层dao或service层中发生任何异常,您应该将其弹出到controller图层(通过添加throws XXXExceptiondao和服务层的方法签名,这是最常用的方式).只有controller图层才能处理异常.
这是一个很好的教程,介绍如何使用spring处理REST异常.
发送状态为的HTTP状态代码500或JSON对象:
听起来像是在编写API Spring MVC.看,当你编写API时,你应该遵循适当的约定.全局接受的是,对于内部服务器错误,您使用代码发送HTTP响应500,这意味着内部服务器错误.
JSON在这种情况下,您不应该发送响应的原因有多种.其中一个主要原因是您的API客户端的隐含假设.这是200带有JSON对象代码的HTTP响应意味着每件事情都正常.因此,客户端业务逻辑可能最终反映出错误的假设.
在这里,您可以看到一些API知名组织的一些错误代码约定: