Spring Boot 中全局异常处理器

Posted 仰望星空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot 中全局异常处理器相关的知识,希望对你有一定的参考价值。

  Spring Boot 中全局异常处理器,就是把错误异常统一处理的方法。等价于Springmvc中的异常处理器。

步骤一:基于前面的springBoot入门小demo修改

步骤二:修改HelloController类

  修改HelloController,使得访问/hello一定会产生异常: some exception

package cn.xdf.springboot.web;
import java.text.DateFormat;
import java.util.Date;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloController {

    @RequestMapping("/hello")
    public String hello(Model m) throws Exception{
        m.addAttribute("now",DateFormat.getDateTimeInstance().format(new Date()));
        if (true) {  //制造必然异常
            throw new Exception("some exception 异常内容!");
        }
        return "hello";  //视图重定向hello.jsp
        
    }
}

步骤三:创建全局异常处理器类GlobalExceptionHandler

  新增加一个类GlobalExceptionHandler,用于捕捉Exception异常以及其子类。
  捕捉到之后,把异常信息,发出异常的地址放进ModelAndView里,然后跳转到 errorPage.jsp

package cn.xdf.springboot.exception;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

@ControllerAdvice //@ControllerAdvice 该注解定义全局异常处理类
public class GlobalExceptionHandler {
    @ExceptionHandler(value = Exception.class) //@ExceptionHandler 该注解声明异常处理方法
    public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
        ModelAndView mav = new ModelAndView();
        mav.addObject("exception", e);  //异常内容(页面展示)
        mav.addObject("url", req.getRequestURL()); //请求的url地址(页面展示)
        mav.setViewName("errorPage"); //设置视图名称
        return mav;
    }
}

步骤四:创建errorPage.jsp

  errorPage.jsp 格式化一下,稍微好看点显示这些异常信息

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>系统故障</title>
</head>
<body>

<div style="width:500px;border:1px solid lightgray;margin:200px auto;padding:80px">
系统出现了异常,异常原因是:
    ${exception}
    <br><br>
    出现异常的地址是:
    ${url}
</div>
</body> </html>

步骤五:测试

  因为配置了热部署,就不用重启了,刷新页面即可,效果图如下:

 

以上是关于Spring Boot 中全局异常处理器的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot2 系列教程(十三)Spring Boot 中的全局异常处理

Spring Boot 全局异常处理,这样写才优雅...

Spring Boot-全局异常处理

峰哥说技术系列-9 Spring Boot ControllerAdvice处理全局异常 - 副本

spring boot 全局异常处理

Spring Boot系列SpringBoot全局异常处理数据校验