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方法执行之前执行。

    参考链接

  • 相关阅读:
    @media screen响应式
    gulp轻松上手
    Node.js基本讲解
    百度地图
    SQL语言(增删改查)
    AJAX基本介绍(web前端)
    找出链表的第一个公共节点
    微软算法100题58 从尾到头输出链表(java)
    最长递增子序列
    各种排序算法
  • 原文地址:https://www.cnblogs.com/MrSaver/p/11871883.html
Copyright © 2011-2022 走看看