• 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("自定义异常");
        }

    结果:

  • 相关阅读:
    Python 操作 Azure Blob Storage
    @private、@protected与@public三者之间的区别
    iOS设计模式
    NSMapTable、NSHashTable与NSPointerArray的封装
    iOS设计模式
    用UITextView加载rtfd文件
    UIWebView如何加载本地图片
    [翻译] BezierString
    [翻译] AYVibrantButton
    用NSOperation写下载队列
  • 原文地址:https://www.cnblogs.com/hbolin/p/10671330.html
Copyright © 2020-2023  润新知