SpringBoot(十九)@ControllerAdvice+@ExceptionHandler全局捕获Controller异常

Posted 请叫我头头哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot(十九)@ControllerAdvice+@ExceptionHandler全局捕获Controller异常相关的知识,希望对你有一定的参考价值。

在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler、@InitBinder、@ModelAttribute,并应用到所有@RequestMapping中。@ControllerAdvice官方文档。创建全局异常处理类:通过使用@ControllerAdvice定义统一的异常处理类,而不是在每个Controller中逐个定义。@ExceptionHandler用来定义函数针对的异常类型,最后将Exception对象和请求URL映射到error.html中.

v新建异常捕获类

统一异常处理

package com.demo.common;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;

/**
 * Created by toutou on 2018/12/9.
 */
@ControllerAdvice
public class CatchGlobalException {
    @ExceptionHandler(value = Exception.class)
    public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
        ModelAndView mav = new ModelAndView();
        mav.addObject("exception", e);
        mav.addObject("url", req.getRequestURL());
        mav.setViewName("error");
        return mav;
    }

}

verror page

实现error.html页面展示:在templates目录下创建error.html,将请求的URL和Exception对象的message输出。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" >
<head lang="en">
    <meta charset="UTF-8" />
    <title>抱歉,这是一个错误页</title>
</head>
<body>
<div>很抱歉,这是我们的一个错误页</div>
<div>影响的因素有很多,我们会尽快解决的。  ﹃_﹃〣</div>
<div th:text="${url}"></div>
<div th:text="${exception.message}"></div>
</body>
</html>

v效果

在Controller中"创建"一个异常。

    @RequestMapping("/debug")
    public String Debug(){
        int number = 5 / 0;
        return null;
    }

以上是关于SpringBoot(十九)@ControllerAdvice+@ExceptionHandler全局捕获Controller异常的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot入门十九,简单文件上传

十九springboot整合ElasticSearch实战(万字篇)

十九SpringBoot2核心技术——整合Alibaba Dubbo

十九SpringBoot2核心技术——整合Alibaba Dubbo

第十九章 springboot + hystrix

第二十九章 springboot + zipkin + mysql