基于Spring Boot的统一异常处理设计
2019-10-25 15:46
302 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hi_onebro/article/details/102744421
基于Spring Boot的统一异常处理设计
Spring Boot中,支持RestControllerAdvice统一处理异常,在一个请求响应周期当中,如果Controller,Service,Repository出现任何异常,都会被RestControllerAdvice机制所捕获苏州活动策划,进行统一处理。
进行统一异常处理的目的也就是为了将千奇百怪的异常信息转换成用户可识别的错误信息
统一异常拦截器
@RestControllerAdvice @Slf4j public class GlobalExceptionTranslator { }
系统中的两类异常处理
第一类:业务自定义的异常,遇到这种异常,拦截器记录后,将业务异常自己的信息抛出。
@ExceptionHandler(BusinessException.class) public JSONObject handleError(BusinessException e) { log.error("Business Exception {}", getStackTraceAsString(e)); return error(e); }
第二类:未定义异常,拦截器负责统一屏蔽原来的异常信息,转为服务器内部异常抛出。
@ExceptionHandler(Throwable.class) public JSONObject handleError(Throwable undefined) { log.error("Internal Server Error {}", getStackTraceAsString(undefined)); return error(new BusinessException(FAILURE)); }
调用者收到error的结果后,直接显示msg内容为用户可见的错误信息即可。
如何自定义一个业务异常
在业务开发中,通常无需进行Try catch处理,有业务异常直接抛出即可。如果需要定义一类通用的异常,则需要在自己业务模块下新建异常类,继承于 BusinessException
public class PaymentException extends BusinessException { //重写构造函数,从而定义该自定义异常的用户可见的错误信息 public PaymentException() { super("支付失败"); } }
如何自定义一个框架级异常
在系统框架层面,已经预定义了一些常见的异常类,如:
类名
定义
预置错误信息
PermissionDenyException
用户访问未授权的内容
权限不足
ServiceNotFoundException
调用微服务失败
调用相关服务失败
其他异常
…
…
在定义框架级异常时,除了需要编写异常类之外,如需要前端根据error CODE做对应的处理,就可以在ResultCode中增加定义。示例如下:
@Getter @AllArgsConstructor public enum ResultCode { /** * 操作成功 */ SUCCESS(HTTP_OK, "操作成功"), /** * 因程序内部错误操作失败(如不指定,则默认这个异常) */ FAILURE(HTTP_INTERNAL_ERROR, "系统运行异常,请联系管理员"), /** * 用户访问未授权的内容 */ UN_AUTHORIZED(HTTP_UNAUTHORIZED, "权限不足"), /** * 调用微服务失败 */ NOT_FOUND(HTTP_NOT_FOUND, "调用相关服务失败"); final int code; final String msg; }
一个框架级异常的实现类
public class PermissionDenyException extends BusinessException { public PermissionDenyException() { super(UN_AUTHORIZED); } }
如需要框架对该异常定义统一的策略,则需要在GlobalExceptionTranslator实现该策略,示例如下:
public class GlobalExceptionTranslator { @ExceptionHandler(NewGlobalException.class) public JSONObject handleError(NewGlobalException e) { // 这里可以实现自定义的异常策略 return error(new BusinessException(e.getResultCode(),e.getMessage())); } }
相关文章推荐
- 基于Spring Boot的统一异常处理设计
- SpringBoot 和 SpringMVC的异常统一处理
- Spring Boot中Web应用的统一异常处理
- 【异常处理】Springboot对Controller层方法进行统一异常处理
- 【SpringBoot】Http请求统一异常(返回数据)处理与单元测试
- Spring MVC/Boot 统一异常处理最佳实践
- Spring Cloud Spring Boot mybatis分布式微服务云架构(十一)Web应用的统一异常处理
- Spring Boot学习笔记8:统一异常处理
- SpringBoot处理全局统一异常
- Springboot-系统异常统一处理(接口编程异常处理)
- Spring Boot 统一异常这样处理和剖析,安否?
- Spring Boot后端返还JSON数据 + 统一异常处理(返还JSON错误)
- Spring Boot学习进阶笔记(五)-异常统一处理
- Spring Boot 系列@ControllerAdvice 拦截异常并统一处理
- 【Spring Boot】Spring Boot之统一异常处理
- springboot + shiro 权限注解、统一异常处理、请求乱码解决
- Spring-Boot 统一异常处理
- 【SpringBoot】Spring Boot进阶之Web进阶( 第2章 Web进阶- 统一异常处理 )
- SpringBoot 统一异常处理--- @ControllerAdvice 使用
- SpringBoot进阶之统一异常处理(含源码)