持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第 27 天,点击查看活动详情
1 前言
在 springboot 项目开发中,面对一些业务场景需要用异常信息来终止业务的处理,通过抛异常的方式可以进行统一的异常处理,而不需要通过业务代码对异常信息的包装,通过方法返回。通过异常信息的方式可以简化异常的处理,建立异常信息处理类来处理业务异常信息,因此异常信息的处理在项目中十分重要。
2 异常信息处理
在异常处理之前,需要准备全局的异常处理类,以及定义异常信息,如果是前后端分离的项目,只需要处理接口的异常即可,如果是前后端不分离的项目,则需要处理页面报错的异常信息。
2.1 定义全局异常处理类
异常处理类需要加注解 @RestControllerAdvice
和 @ControllerAdvice
,两者的关系如下:
@RestControllerAdvice = @ResponseBody + @ControllerAdvice
, 而 @ControllerAdvice
则是包含了 @Component
注解。
在具体的异常处理上,需要引入 @ExceptionHandler
注解加入在对应的异常信息处理方法上。如果需要方法返回对应的 Http 状态码,则需要引入另外一个注解,@ResponseStatus
进行业务状态码的赋值。
在这里需要提一下的就是,如果项目中使用了 Validate 进行参数的校验,那么就会抛出方法参数不合法的异常,那么如果进行参数的解析并进行包装呢,就需要解析 MethodArgumentNotValidException.BindingResult 的信息,具体代码如下:
2.2 异常类
定义异常信息处理类,需要集成 RuntimeException
, 这样就在项目中就可以抛出运行时异常,而不必在方法上 throw 该异常信息。
同时还需要包装一个全局信息包装类,用于包裹数据信息和异常信息以及状态码
3 参数校验
关于参数信息的校验,可能会出现校验失效的情况,所以为了保险起见,可以进行如下配置,可以保证参数校验起作用。需要写一个切面用于拦截 controller 层的接收参数。
参数校验的方法如下所示,主要是使用了 ValidatorFactory 提供的参数校验器进行参数的校验,通过这种手动的模式可以保证参数校验的生效。
当参数校验不合法时,就会抛出异常信息,然后会被全局异常信息处理类拦截处理。
4 总结
在本文中主要讲述了异常信息的处理,以及常见的参数校验配置问题,如果后续还有异常处理相关的内容,还会继续更新此文,希望对大家的工作有所帮助。