Spring Boot学习笔记8:统一异常处理

Spring Boot学习笔记8:统一异常处理

统一异常处理

虽然,Spring Boot中实现了默认的error映射,但是在实际应用中,默认的错误页面对用户来说并不够友好,我们通常需要去实现我们自己的异常提示。

下面我们以之前的Spring Bootx学习笔记7:使用Thymeleaf模板引擎渲染web视图为基础,进行统一异常处理的改造。

  • 创建一个自定义异常。
public class MyException extends Exception {

    public MyException(String message) {
        super(message);
    }
}
  • 创建一个抛出自定义异常的控制器。这里访问"/hello"抛出自定义异常,重定向到"/myError"
@Controller
@Controller
public class MyController {

    @RequestMapping("/hello")
    public String hello() throws MyException {
        throw new MyException("我的错误");
    }

    @RequestMapping("/myError")
    public String myError(){
        return "myError";
    }
}
  • 创建全局异常处理类:通过使用@ControllerAdvice定义统一的异常处理类,而不是在每个Controller中逐个定义。@ExceptionHandler用来定义函数针对的异常类型,最后重定向到"/myError"。注意Model属性会随着重定向而被销毁,所以这里直接使用RedirectAttributesModelMap对象的addFlashAttribute方法来添加Model属性。
@ControllerAdvice
public class MyControllerAdvice {

    @ExceptionHandler(value = MyException.class)
    public String myErrorHandler(RedirectAttributesModelMap modelMap, MyException myException){
        modelMap.addFlashAttribute("myException",myException);
        return "redirect:/myError";
    }
}
  • 实现myError.html页面展示:在templates目录下创建myError.html,将放入Model的属性进行输出。
<!DOCTYPE html>
<html xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <title>统一异常处理</title>
</head>
<body>
    <div th:text="${myException.message}"></div>
</body>
</html>

打开浏览器,打开http://http://localhost:8080/hello重定向跳转到http://http://localhost:8080/myError,测试结果如下,跳转到了错误页面。
统一异常处理测试

如果是要返回JSON字符串而非转发或重定向视图,与@RestController类似可以用@RestControllerAdvice替代@ControllerAdvice,或者与@RequestMapping类似在@ExceptionHandler注解的方法上注解@ResponseBody

GitHub示例

Springboot Study.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值