框架 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]

页面展示:

原文地址:https://www.cnblogs.com/1446358788-qq/p/14118446.html