异常统一处理

心已赠人 2023-07-10 08:12 141阅读 0赞

异常统一处理

项目中有负责此方面,最近有空正好总结下,代码为测试代码,非在项目中所写的业务代码,本质相同。

异常抛出及处理流程:

图片百度得来,觉得总结的比较好。
在这里插入图片描述
1、在项目抛出自定义异常,springMVC框架抛出框架异常类型
2、统一由异常捕获类捕获异常,并进行处理
3、捕获到自定义异常则直接取出错误代码及错误信息,响应给用户。
4、捕获到非自定义异常类型首先从Map中找该异常类型是否对应具体的错误代码,如果有则取出错误代码和错误信息并响应给用户,如果从Map中找不到异常类型所对应的错误代码则统一为404错误代码并响应给用户。
5、将错误代码及错误信息以Json格式响应给用户。

总结:一句话,捕获的异常能解析则解析,不能解析则统一给个响应码,此响应码对应一个通用错误消息,比如“系统繁忙”,前端拿着此响应码记得给个好点的图,不然会被差评(哈哈哈)。

自定义异常类:

  1. /** * 描述: * 自定义异常类 * * @author XueGuCheng * @create 2020-02-29 23:06 */
  2. public class XGCException extends RuntimeException {
  3. private ResultCode resultCode;
  4. public XGCException(ResultCode resultCode){
  5. //异常信息为错误代码 + 异常信息
  6. super("错误代码:"+resultCode.code()+"错误信息:"+resultCode.message());
  7. this.resultCode = resultCode;
  8. }
  9. public ResultCode getResultCode(){
  10. return this.resultCode;
  11. }
  12. }

自定义异常抛出类:

  1. /** * 描述: * 自定义异常抛出类 * * @author XueGuCheng * @create 2020-02-29 23:09 */
  2. public class ExceptionCast {
  3. //使用此静态方法抛出自定义异常
  4. public static void cast(ResultCode resultCode){
  5. throw new XGCException(resultCode);
  6. }
  7. }

自定义异常捕获类:

  1. /** * 描述: * 自定义异常捕获类 * * @author XueGuCheng * @create 2020-02-29 23:12 */
  2. @ControllerAdvice
  3. public class ExceptionCatch {
  4. private static final Logger LOGGER = LoggerFactory.getLogger(ExceptionCatch.class);
  5. //使用ImmutableMap类型的容器存放异常类型和错误代码的映射:EXCEPTIONS
  6. //ImmutableMap的特点的一旦创建不可改变,并且线程安全
  7. private static ImmutableMap<Class<? extends Throwable>, ResultCode> EXCEPTIONS;
  8. //使用builder来构建一个异常类型和错误代码的异常
  9. protected static ImmutableMap.Builder<Class<? extends Throwable>, ResultCode> builder = ImmutableMap.builder();
  10. //捕获XGCException异常
  11. @ExceptionHandler(XGCException.class)
  12. @ResponseBody
  13. public ResponseResult xGCException(XGCException e) {
  14. LOGGER.error("catch exception : {}\r\nexception: ", e.getMessage(), e);
  15. ResultCode resultCode = e.getResultCode();
  16. ResponseResult responseResult = new ResponseResult(resultCode);
  17. return responseResult;
  18. }
  19. //对Exception异常的捕获
  20. @ExceptionHandler(Exception.class)
  21. @ResponseBody
  22. public ResponseResult exception(Exception exception) {
  23. //记录日志
  24. LOGGER.error("catch exception:{}", exception.getMessage());
  25. if (EXCEPTIONS == null) {
  26. EXCEPTIONS = builder.build();
  27. }
  28. final ResultCode resultCode = EXCEPTIONS.get(exception.getClass());
  29. final ResponseResult responseResult;
  30. if (resultCode != null) {
  31. responseResult = new ResponseResult(resultCode);
  32. } else {
  33. responseResult = new ResponseResult(CommonCode.SERVER_ERROR);
  34. }
  35. return responseResult;
  36. }
  37. static {
  38. //在这里加入一些基础的异常类型判断
  39. builder.put(XXXException.class,Code);
  40. }
  41. }

发表评论

表情:
评论列表 (有 0 条评论,141人围观)

还没有评论,来说两句吧...

相关阅读

    相关 统一异常处理

    目录 一、全局异常处理 二、处理特定异常 三、自定义异常 -------------------- 当程序出现异常的时候,如果我们不加处理,或者直接抛出异常,那么相应

    相关 异常统一处理

    异常统一处理 项目中有负责此方面,最近有空正好总结下,代码为测试代码,非在项目中所写的业务代码,本质相同。 异常抛出及处理流程: 图片百度得来,觉得总结的比较