本篇主要介绍项目开发中两个比较基础但是非常重要的模块,异常管理和事务管理,如何去使用进行了介绍,着重对AOP的使用进行了介绍,实现一个基于AOP的简单案例:定位耗时较长的业务方法,统计部分业务方法的执行耗时。
一、全局异常处理器
需求:软件开发springboot项目过程中,不可避免的需要处理各种异常,spring mvc架构中各层会出现大量的try{...} catch{...} finally{...}代码块,不仅有大量的冗余代码,而且还影响代码的可读性。这样就需要定义个全局统一异常处理器,以便业务层再也不必处理异常。
具体例子如下:
在部门管理系统中,存在了一个就业部,此时再添加一个就业部之后,就会响应500:

查看服务端报错显示duplicate,也就是重复了,因为在数据库建表的时候,给name设置了unique约束,唯一约束。所以出现异常的时候前端不能对返回的结果进行正确的接收以及处理。
所以要进行异常处理:
首先出现了异常其实是一步步向上抛的,mapper向service抛,然后service向controller层抛,然后controller层向上抛,就产生了这种类似500等错误。如果全写到controller层中try...catch...处理,代码非常臃肿,所以最好的方法就是定义一个全局异常处理器,在controller层抛出之后丢给全局异常处理器,然后经过处理之后,返回设定好的类型json格式数据给前端响应过去。
实现方式:
用@RestControllerAdvice+@ExceptionHandler来实现全局异常处理器:
异常处理最好是解耦的,并且都放在一个地方集中管理:
@ExceptionHandler:统一处理某一类异常,从而能够减少代码重复率和复杂度
@RestControllerAdvice:异常集中处理,更好的使业务逻辑与异常处理剥离开,这个注解包含两部分@RestControllerAdvice=@ControllerAdvice+@ResponseBody;可以将java对象数据类型转化为json格式的数据相应给前端。
@ResponseStatus:可以将某种异常映射为HTTP状态码
只使用@ExceptionHandler,只能在当前Controller中处理异常,与@ControllerAdvice结合可以实现全局异常处理,不用每个controller都配置。
下面是一个简单的例子,其中也可以去自定义异常然后在方法中进行判断,然后响应给前端相应的信息:
@RestControllerAdvice
public class GlobeExceptionHandler {
@ExceptionHandler(Exception.class)
public Result ex(Exception ex){
ex.printStackTrace();
return Result

最低0.47元/天 解锁文章
1233

被折叠的 条评论
为什么被折叠?



