spring-boot 异常处理

在项目中我们难免会遇到各种异常,
如何简单有效地捕获并记录这些异常变得非常重要

第一种全局异常处理方式

编写一个Controller接受请求,加入异常捕获方法

@RestController
public class WebController {

    @GetMapping("/login")
    public String login() {
        throw new NullPointerException("null pointer exception");
    }

    //@ExceptionHandler捕获给定异常及其所有子类异常
    //给定的捕获范围可大可小,可以是Exception,也可以是某一具体异常例如NullPointerException
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public String exceptionHandler(Exception exception) {
        return "find exception :" + exception.getMessage();
    }
}
浏览器请求localhost:8080/login的结果

可以告诉大家的是,上面编写的exceptionHandler方法只能够捕获当前WebController发生的异常,那其他Controller发生的异常怎么办?难道要每一个Controller写一个异常捕获方法吗?答案是no!你可以写一个BaseController方法去做异常捕获的事情,然后让每一个Controller都去继承它,这样就可以实现全局异常捕获了。

但,有没有更好的方式能够做到全局异常捕获,因为Java只能单继承,只是为了实现异常捕获,就要把唯一的继承名额给用掉,未免有点可惜,那下面介绍另一种更为优秀的异常捕获方式。

第二种全部异常处理方式

编写一个类,加上@ControllerAdvice注解,编写异常捕获方法

@ControllerAdvice
public class GlobalExceptionHandler {
    
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public String globalExceptionHandler(Exception exception) {
        return "global exception handler : " + exception.getMessage();
    }
}

把上文编写在WebController中的异常捕获方法注释掉,按照新的方式再试一下刚才那个请求,这样就不用把异常捕获方法写在每一个Controller中,或是编写一个BaseController实现异常捕获方法,让每个Controller都继承它来实现全局异常处理啦~

这一节内容就到这里,读者还可以持续关注笔者的springboot系列的其他文章哦。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 先谈谈“异常处理”这件事。下面有 2 份伪代码,对比下: 可以看出,如果使用异常替代返回错误码,错误处理代码...
    Anoyi阅读 2,272评论 1 26
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,872评论 18 399
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,005评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,650评论 25 709
  • 最近一段时间疯狂的喜欢上了一个韩国爱豆 一直在追韩剧的道路上狂奔 羡慕憧憬着美好的爱情故事 尽管女主平凡不过 男主...
    Hypnoticlyh阅读 358评论 0 3