zoukankan      html  css  js  c++  java
  • Spring Boot 6.统一处理异常

    package com.example.springbootstudy;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import javax.servlet.http.HttpServletRequest;
    import java.util.Map;
    
    @ControllerAdvice  // 不指定包默认加了@Controller和@RestController都能控制
    //@ControllerAdvice(basePackages ="com.example.springbootstudy")
    public class ControllerAdviceHandler {
    
        private static final Logger logger = LoggerFactory.getLogger(ControllerAdviceHandler.class);
    
        @ResponseBody
        @ExceptionHandler(value = Exception.class)
        public String errorHandler(HttpServletRequest request, Exception exception) {
            writeErrorLogToFile(request, exception);
            return "系统异常";
        }
    
        // 将错误日志写到文件中
        private static void writeErrorLogToFile(HttpServletRequest request, Exception exception) {
            logger.error("                              ");
            logger.error("------------------------------");
            logger.error("系统异常 -- 请求地址:" + request.getRequestURI());
            printErrorQuestParameters(request.getParameterMap());
            logger.error("系统异常 -- 具体错误:" + exception.getMessage());
            logger.error("------------------------------");
        }
    
        // 打印系统异常时的请求参数
        private static void printErrorQuestParameters(Map<String, String[]> parameterMap) {
            for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
                logger.error("系统异常 -- 请求参数:" + entry.getKey() + " -- 请求值:" + forEachStringList(entry.getValue()));
            }
        }
    
        private static String forEachStringList(String[] values) {
            StringBuilder stringBuilder = new StringBuilder();
            for (String item : values) {
                stringBuilder.append(item);
                stringBuilder.append(";");
            }
            return stringBuilder.toString();
        }
    
    }

    测试:

        @PostMapping("appError")
        public String appError(@RequestParam String name) throws Exception {
            logger.info("请求参数 -- name:" + name);
            logger.error("抛出异常");
            throw new Exception("自定义异常");
        }

    结果:

  • 相关阅读:
    map()和filter()函数讲解与示例
    通过假设巧妙的判断出参数的最大值和最小值
    通过函数定义数据结构list中的每个元素是一个元组,扑克牌示例
    FileCloud 的原理简述&自己搭建文件云
    opengl学习笔记
    Pascal的sin^-1函数实现
    OpenGL键盘交互响应事件
    OpenGL 鼠标交互响应事件
    重踏比尔盖茨走过的路——模拟操作系统
    Pascal代码自动格式化
  • 原文地址:https://www.cnblogs.com/hbolin/p/10671330.html
Copyright © 2011-2022 走看看