zoukankan      html  css  js  c++  java
  • SpringBoot小技巧:统一异常处理

    SpringBoot小技巧:统一异常处理

    情景描述

      对于接口的定义,我们通常会有一个固定的格式,比如:

      

      但是调用方在请求我们的API时把接口地址写错了,就会得到一个404错误,且不同于我们定义的数据格式。

      我们需要在发生这种系统错误时也能返回我们自定义的那种格式,就需要定义一个异常处理类,这个类既可以返回统一的格式,也可以统一记录异常日志

    方法

      我们在@ExceptionHandler(value = Exception.class)中指明了异常器处理Exception及其子类。JsonResponse是我们返回格式的实体类,当发生异常时,会被封装好并返回给调用方。 

    @ControllerAdvice
    public class GlobalExceptionHandler {
    
        private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
    
        @ExceptionHandler(value = Exception.class)
        @ResponseBody
        public JsonResponse defaultErrorHandler(HttpServletRequest request, HttpServletResponse response,Exception e){
            logger.error("",e);
            JsonResponse jsonResponse = new JsonResponse();
            jsonResponse.setMsg(e.getMessage());
            //[!] 单独处理运行时异常
            if(e instanceof RuntimeException)
                jsonResponse.setStatus(500);
            else
                jsonResponse.setStatus(502);
            jsonResponse.setData(null);
            return jsonResponse;
        }
    }
    

      

    资料

    @ControllerAdvice

      ControllerAdvice拆分开来就是Controller Advice,关于Advice,前面我们讲解Spring Aop时讲到,其是用于封装一个切面所有属性的,包括切入点和需要织入的切面逻辑。这里ContrllerAdvice也可以这么理解,其抽象级别应该是用于对Controller进行“切面”环绕的,而具体的业务织入方式则是通过结合其他的注解来实现的。@ControllerAdvice是在类上声明的注解,其用法主要有三点:

    • 结合方法型注解@ExceptionHandler,用于捕获Controller中抛出的指定类型的异常,从而达到不同类型的异常区别处理的目的
    • 结合方法型注解@InitBinder,用于request中自定义参数解析方式进行注册,从而达到自定义指定格式参数的目的;
    • 结合方法型注解@ModelAttribute,表示其标注的方法将会在目标Controller方法执行之前执行。

    参考链接

  • 相关阅读:
    python网站开发准备ubuntu14.04安装mysql实现windows管理
    python 数据结构之二叉树
    python 数据结构之二分查找的递归和普通实现
    python 数据结构之归并排序
    python数据结构之希尔排序
    ctf study of jarvisoj reverse
    python数据结构之quick_sort
    堆与栈
    汇编整理
    js运算符
  • 原文地址:https://www.cnblogs.com/MrSaver/p/11871883.html
Copyright © 2011-2022 走看看