十二、Spring Boot 异常处理

(一)、自定义错误页面

注:

  • 所有异常统一跳转同一个页面error.html
  • 自定义错误页面名称必须为error.html
  • 自定义错误页面通过exception获取异常信息;
  • error.html对所有controller都有效果,其它controller的异常也会跳转至此页面。

1.默认异常处理方式

SpringBoot 默认的处理异常的机制:SpringBoot 默认的已经提供了一套处理异常的机制。
一旦程序中出现了异常 SpringBoot 会像/error 的 url 发送请求。在 springBoot 中提供了一个
叫 BasicExceptionController 来处理/error 请求,然后跳转到默认显示异常的页面来展示异常
信息。

2.异常输出配置

application.properties文件配置异常输出:

server.error.include-exception=true

3.自定义异常输出页面

:页面名称必须为error.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定义错误页面</title>
</head>
<body>
出错了...
<br>
原因:<span th:text="${exception}"></span>
</body>
</html>

(二)、@ExceptionHandler异常

注:只能处理当前controller中出现的异常
controller中添加异常处理:

    @ExceptionHandler(value = {java.lang.NullPointerException.class})
    public ModelAndView nullPointerException(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.addObject("error", e.toString());
        mv.setViewName("nullException");
        return mv;
    }

  • @ExceptionHandler,捕捉异常。value可以设置多个异常然后通过ModelAndView.addObjectModelAndView.setViewName处理不同异常,也可以创建多个方法添加注解@ExceptionHandler分别处理。

(三)、@ControllerAdvice + @ExceptionHandler

  • 可处理全局异常,所有controller中的异常都可以捕捉到;
  • 创建自定义controller类集中处理异常;
  • 自定义controler添加注解@ControllerAdvice
  • 添加异常处理方法。

代码:


@ControllerAdvice
public class ExceptionController {

    @ExceptionHandler(value = java.lang.NullPointerException.class)
    public ModelAndView nullPointerException(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.addObject("error", e.toString());
        mv.setViewName("controllerAdviceException");
        return mv;
    }
}

(四)、SimpleMappingExceptionResolver

  • 指定不同异常跳转至不同页面,无法异常原因;
  • 创建自定义controller处理各种不同异常;
  • 自定义controller添加注解@Configuration
  • 创建自定义方法且方法返回值类型为SimpleMappingExceptionResolver,处理异常
  • 方法添加注解@Bean.。
    代码:
@Configuration
public class GlobalException {
    @Bean
    public SimpleMappingExceptionResolver getExceptionResolver(){
        SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();

        Properties properties = new Properties();
        // 异常类型 - 跳转视图,可put多个
        properties.put("java.lang.NullPointerException", "exception1");

        resolver.setExceptionMappings(properties);
        return resolver;
    }
}

(五)、HandlerExceptionResolver

  • 指定不同异常跳转至不同页面,可获取异常原因;
  • 创建自定义controller处理各种不同异常;
  • 自定义controller添加注解@Configuration并且实现接口HandlerExceptionResolver
  • 重载方法resolveException,处理不同异常跳转页面。
    代码:
@Configuration
public class GlobalException implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        ModelAndView modelAndView = new ModelAndView();
        // 处理不同异常
        if(ex instanceof NullPointerException){
            modelAndView.setViewName("nullException");
        }
        if (ex instanceof ArithmeticException) {
            modelAndView.setViewName("arithmeticException");
        }
        modelAndView.addObject("error", ex.toString());
        return modelAndView;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值