finally返回值对异常的影响

在工作中遇到一个小问题,先在此记录下,具体的细节原理暂时不讨论。

场景如下:比如对项目进行转账操作,项目表中有个总金额冗余字段,所以正常情况下是先录入项目转账记录表,然后再更新项目表中的那个冗余字段。但是项目中有个金额上限问题,即转账总金额有个上限的范围,所以每次在更新项目表中那个冗余字段的时候需要判断一下是否异常超过上限了(此时转账记录的数据是已经入库了,因为使用了事务回滚,所以不必担心),没有就可以直接修改项目表中的字段,有的话就抛出异常使其回滚。按理说这样没有问题,但是此时由于抛出的异常导致我无法返回相关的友好提示信息给前端展示。  后来想到了finally貌似可以返回值,即不管有没有异常好像都可以,后来发现我太天真了,finally确实返回了提示信息,但是却把异常给干掉了,数据不回滚了了,导致两张表的数据出现了问题。百度了下才知道finally虽然可以返回值,但是其实是改变了方法的返回路径,相当于强行改变方法原有的返回值,所以对于该方法来说异常已经失效了。还好方法是写在service层的,在controller层对service方法的返回值进行异常捕获就OK了。用的是springmvc。

所以不要再finally滥用return语句,适合做一下资源的关闭操作,而不影响返回值的。至于具体的细节,我也不知道了。。。

猜你喜欢

转载自blog.csdn.net/huxiaoming0821/article/details/79525322