返回介绍

12.2 Spring Boot 全局异常使用

发布于 2025-04-26 13:53:53 字数 3010 浏览 0 评论 0 收藏

12.2.1 自定义错误页面

12.1 节中,我们已经知道 Spring Boot 的错误提示页面的用户体验不好,这一节将自己实现错误提示页面。首先,在 my-spring-boot 项目目录/src/main/resources/static 下新建自定义错误页面 404.html,具体的代码如下:

错误页面的内容很简单,就是当访问路径不存在时,在页面中间显示一句话:“主人,我累了,让我休息一会!!!”。当然,在真正的项目中,该错误页面的样式会更加美观。404 错误页面开发完成之后,我们在 my-spring-boot 项目目录/src/main/java/ com.example.demo 下新建包 error,并在 error 包下新建 ErrorPageConfig 配置类,具体代码如下:

  • EmbeddedServletContainerCustomizer:Spring Boot 的自动配置有一个特性就是能够通过代码来修改配置,这样可以很方便地修改配置,而我们只需要实现 Spring Boot 定义的接口即可。这里需要注册一个实现 EmbeddedServletContain erCustomizer 的 Bean,在 ErrorPageConfig 类中,我们使用匿名类来实现 Embe ddedServletContainerCustomizer 接口,同时实现该接口唯一的方法 customize,并在 customize 方法中自定义 401、404、500 等错误页面。

12.2.2 测试

404.html 错误页面和 ErrorPageConfig 类开发完成之后,重新启动 my-spring-boot 项目(项目启动之前,记得启动 Redis 缓存服务和 ActiveMQ 服务,否则项目会报错,之后不再提示),在浏览器中输入链接 http://localhost:8080/ayUser/testdddd,由于该链接不存在,因此会出现如图 12-2 所示的自定义错误页面。

图 12-2 自定义 404 错误界面

12.2.3 全局异常类开发

在项目中,我们会遇到各种各样的业务异常,业务异常是指正常的业务处理时,由于某些业务的特殊要求而导致处理不能继续而抛出异常。我们希望这些业务异常能够被统一处理,因此使用 Spring Boot 进行全局异常处理就变得很方便。首先,统一封装自定义业务异常 BusinessException,该类继承自 RuntimeException 异常类,并提供带有异常信息的构造方法,具体代码如下:

然后在 my-spring-boot 项目目录/src/main/java/com.example.demo.error 下新建错误信息类 ErrorInfo,该类用于封装错误信息,包括错误码,具体代码如下:

其次,在 my-spring-boot 项目目录/src/main/java/com.example.demo.error 下新建统一异常处理类 GlobalDefaultExceptionHandler,具体代码如下:

  • @ControllerAdvice:定义统一的异常处理类,basePackages 属性用于定义扫描哪些包,默认可不设置。
  • @ExceptionHandler:用来定义函数针对的异常类型,可以传入多个需要捕获的异常类。
  • @ResponseBody:如果返回的为 json 数据或其他对象,就添加该注解。

最后,在 AyUserController 类下添加控制层方法 findAll,并在方法里抛出 BusinessException,该异常会被全局异常类捕获到,具体代码如下:

12.2.4 测试

代码开发完成之后,重新启动 my-spring-boot 项目,项目启动成功之后,在浏览器中输入访问地址:http://localhost:8080/ayUser/findAll,可以看到后端返回的 json 信息,具体信息如下:

       {"code":200,"message":" 业务异常","url":"/ayUser/findAll", "data":null}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。