Spring Boot:异常处理


在Spring Boot中,异常的统一处理,可以使用Spring中的@ControllerAdvice来处理,也可以通过自定义处理

静态异常页面

在Controller中创建一个异常程序


    @RequestMapping("/errors")
    @ResponseBody
    public String errors() throws IOException {
        int i=1/0;
        return  "成功";

    }

前台请求,会显示如下错误页面
在这里插入图片描述
这种页面是不能直接展示给用户的
静态异常页面的定义

固定错误类型

定义未知为resources/error/ 下面
在这里插入图片描述
这样一旦出现错误,就会自动跳转到这个页面

不固定错误类型

同样定义在
定义未知为resources/error/ 下面
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>页面找不到了</h1>

</body>
</html>

这样出现所有的400—499的错误都会定义到4xx页面,要注意的是:如果既有400.html,又有4xx.html出现400错误的时候回优先选择400.html

动态异常页面

动态的异常页面定义方式和静态的基本一致,可以采用的页面模板有jsp,freemarker,thymeleaf,html
动态页面也支持静态页面的表现方式,但是动态异常页面可以显示异常的原因

thymeleaf

这里使用thymeleaf 导入依赖

   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

在templates下创建
在这里插入图片描述
内容如下

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<table border="2">
    <tr>
        <td>path:</td>
        <td th:text="${path}"></td>
    </tr>
    <tr>
        <td>error:</td>
        <td th:text="${error}"></td>
    </tr>
    <tr>
        <td>message:</td>
        <td th:text="${message}"></td>
    </tr>
    <tr>
        <td>timestamp:</td>
        <td th:text="${timestamp}"></td>
    </tr><tr>
    <td>status:</td>
    <td th:text="${status}"></td>
</tr>
  

</table>

</body>
</html>

jsp

使用jsp需要配置全局的异常捕捉
新建类

package touxian_ssm.ssm.config;

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;
import javax.servlet.http.HttpServletResponse;

/**
 * @author 偷闲
 * @date 2019/5/23 15:25
 */

@ControllerAdvice
public class Error {

    public static final String IMOOC_ERROR_VIEW = "error/error";

    @ExceptionHandler(value = Exception.class)
    public Object errorHandler(HttpServletRequest reqest,
                               HttpServletResponse response, Exception e) throws Exception {

        e.printStackTrace();

        ModelAndView mav = new ModelAndView();
        mav.addObject("exception", e);
        mav.addObject("url", reqest.getRequestURL());
        mav.setViewName(IMOOC_ERROR_VIEW);
        return mav;
    }

}

创建error.jsp
在这里插入图片描述
jsp代码如下

<head>
    <title>Title</title>
</head>
<body>
<h1 style="color: red">发生错误:</h1>
<div>${url}</div>
<div>${exception.message}</div>
</body>
</html>

异常页面的顺序是 发生错误->查找动态改错误页面—>查找静态改错误页面->查找动态xx错误页面->查找静态xx错误页面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值