• 【Java Web】统一处理异常


    在这里插入图片描述
    一个异常处理的ControllerAdvice类。它用于处理@Controller注解的控制器中发生的异常

    具体代码功能如下:

    • 导入相关类和方法。
    • 声明一个Logger对象,用于日志记录。
    • 使用@ExceptionHandler注解标记handleException方法,用于处理所有异常。
      -嘛在handleException方法中,首先记录异常信息到日志中。
    • 循环遍历异常的堆栈轨迹(StackTraceElement),并将每条轨迹记录到日志中。
    • 判断请求是普通请求还是异步请求。如果是异步请求(通过- 判断x-requested-with请求头),则返回JSON格式的异常信息;如果是普通请求,则重定向到错误页面。

    具体代码为

    package com.nowcoder.community.controller.advice;
    
    import com.nowcoder.community.util.CommunityUtil;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    
    import java.io.PrintWriter;
    import java.io.IOException;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpServletRequest;
    
    @ControllerAdvice(annotations = Controller.class)
    public class ExceptionAdvice {
    
        private static final Logger logger = LoggerFactory.getLogger(Exception.class);
    
        @ExceptionHandler({Exception.class})
        // 处理所有异常的方法
        public void handleException(Exception e, HttpServletRequest request, HttpServletResponse response) throws IOException {
            // 这三个参数可以解决绝大多数需求
            logger.error("服务器发生异常:"+e.getMessage());
            for(StackTraceElement element: e.getStackTrace()){
                // 每个element记录一条异常信息
                logger.error(element.toString());
            }
    
            /*
                判断普通请求还是异步请求
                如果是普通请求,可以返回页面
                如果是异步请求,需要返回json
            */
            String xRequestedWith = request.getHeader("x-requested-with");
            if("XMLHttpRequest".equals(xRequestedWith)){  // 异步请求
                response.setContentType("application/plain;charset=utf-8");
                PrintWriter writer = response.getWriter();
                writer.write(CommunityUtil.getJSONString(1,"服务器异常!"));
            } else {
                response.sendRedirect(request.getContextPath() + "/error");
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    除此之外,不需要做任何其他代码的修改。

  • 相关阅读:
    哈夫曼压缩算法-Python实现
    大数据下一代变革之必研究数据湖技术Hudi原理实战双管齐下-下
    SpringCloud服务治理介绍&Nacos安装及实现负载均衡
    13 Pearson检验
    文件逻辑结构与物理结构对比(从用户,操作系统的角度)
    c++ 内存释放测试
    简述MVC模式
    激光雷达公司RoboSense车载实验室荣获CNAS认可资质
    使用ASM修改组件化 ARouter
    5G技术在职业教育领域的应用:产生巨变的技术
  • 原文地址:https://blog.csdn.net/qq_42251120/article/details/132697295