web 项目异常信息处理

537 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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 总结

在本文中主要讲述了异常信息的处理,以及常见的参数校验配置问题,如果后续还有异常处理相关的内容,还会继续更新此文,希望对大家的工作有所帮助。