zoukankan      html  css  js  c++  java
  • 框架 Spring Boot 技术入门到整合 7-2 Springboot配置全局的异常捕获 -ajax形式

    0    课程地址

    https://www.imooc.com/video/16724/0 

    1    demo
    1.1    demo

    ErrorHandler.java

    package com.example.demo.exception;
    
    import com.example.demo.tools.JSONResult;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    /**
     * ErrorHandler
     *
     * @author 魏豆豆
     * @date 2020/12/6
     */
    @Controller
    /**
     *@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解
     */
    
    @RequestMapping("/error")
    public class ErrorHandler {
    
        @RequestMapping("/err")
        public String error(){
            int a = 1/0;
            return "templates/error";
    
        }
    
        @RequestMapping("/errAjax")
        public String errorAjax(){
            return "thymeleaf/ajaxerror";
        }
    
        @RequestMapping("/getAjaxerror")
        @ResponseBody
        public JSONResult getAjaxerror(){
            int a = 1/0;
            return JSONResult.ok();
    
        }
    }

    ajaxerror.html

    <!DOCTYPE html >
    <html>
    <head lang="en">
        <meta charset="UTF-8" />
        <title></title>
        
        <script th:src="@{/static/js/jquery.min.js}"></script>
        
    </head>
    <body>
    aaaaa
    <h1>测试ajax错误异常</h1>
    
    <script th:src="@{/static/js/ajaxerror.js}"></script>
    </body>
    </html>
    ajaxerror.js
    $.ajax({
         
    <!--注意:因为我application.properties 中配置了IMooc(server.servlet.context-path=/IMooc),所以这里需要加上/IMooc--> url: "/IMooc/error/getAjaxerror", type: "POST", async: false, success: function(data) { if(data.status == 200 && data.msg == "OK") { alert("success"); } else { alert("发生异常:" + data.msg); } }, error: function (response, ajaxOptions, thrownError) { debugger; alert("error"); } });

    ErrorHandler.java

        @RequestMapping("/getAjaxerror")
        @ResponseBody
        public JSONResult getAjaxerror(){
            int a = 1/0;
            return JSONResult.ok();
    
        }

    IMoocAjaxExceptionHandler.java (获取异常通知)

    package com.example.demo.exception;
    
    import com.example.demo.tools.JSONResult;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.RestControllerAdvice;
    
    import javax.servlet.http.HttpServletRequest;
    
    /**
     * IMoocAjaxExceptionHandler
     *
     * @author 魏豆豆
     * @date 2020/12/6
     */
    @RestControllerAdvice
    /**
     * @RestControllerAdvice = @ResponseBody +@Controller
     */
    public class IMoocAjaxExceptionHandler {
    
        @ExceptionHandler(value = Exception.class)
        public JSONResult errorHandler(HttpServletRequest request,Exception e) throws Exception{
            e.printStackTrace();
            return  JSONResult.errorException(e.getMessage());
        }
    }
    ajaxerror.js
    $.ajax({
         <!--注意:因为我application.properties 中配置了IMooc(server.servlet.context-path=/IMooc),所以这里需要加上/IMooc--> url: "/IMooc/error/getAjaxerror", type: "POST", async: false, success: function(data) { if(data.status == 200 && data.msg == "OK") { alert("success"); } else { alert("发生异常:" + data.msg); } }, error: function (response, ajaxOptions, thrownError) { debugger; alert("error"); } });


    打印日志:

    2020-12-10 23:05:02.339  INFO 16200 --- [nio-8088-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/IMooc]  : Initializing Spring DispatcherServlet 'dispatcherServlet'
    2020-12-10 23:05:02.339  INFO 16200 --- [nio-8088-exec-2] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
    2020-12-10 23:05:02.339  INFO 16200 --- [nio-8088-exec-2] o.s.web.servlet.DispatcherServlet        : Completed initialization in 0 ms
    java.lang.ArithmeticException: / by zero
        at com.example.demo.exception.ErrorHandler.getAjaxerror(ErrorHandler.java:37)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:893)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:807)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1061)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:961)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)
    2020-12-10 23:06:04.783  WARN 16200 --- [io-8088-exec-10] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [java.lang.ArithmeticException: / by zero]

    页面展示:

  • 相关阅读:
    主成分分析PCA(1)
    机器人操作系统入门(七)rospy客户端库
    线性代数的本质(Essense of Linear Algebra)——3Blue1Brown
    机器人操作系统入门(六)roscpp客户端库
    《机器人操作系统(ROS)浅析》肖军浩译
    机器人操作系统入门(五)常用工具
    Python学习(八)Matlab和Numpy异同
    机器人操作系统入门(四)ROS通信架构
    机器人操作系统入门(三)ROS通信架构
    机器人操作系统入门(二)ROS文件系统
  • 原文地址:https://www.cnblogs.com/1446358788-qq/p/14118446.html
Copyright © 2011-2022 走看看