返回顶部
首页 > 资讯 > 精选 >SpringBoot全局异常问题如何解决
  • 368
分享到

SpringBoot全局异常问题如何解决

2023-07-06 12:07:35 368人浏览 八月长安
摘要

这篇文章主要介绍“SpringBoot全局异常问题如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springBoot全局异常问题如何解决”文章能帮助大家解决问题。SpringBoot 是为了

这篇文章主要介绍“SpringBoot全局异常问题如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springBoot全局异常问题如何解决”文章能帮助大家解决问题。

SpringBoot 是为了简化 Spring 应用的创建、运行、调试、部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖就可以轻易的搭建出一个 WEB 工程

实际项目开发中,程序往往会发生各式各样的异常情况,特别是身为服务端开发人员的我们,总是不停的编写接口提供给前端调用,分工协作的情况下,避免不了异常的发生,如果直接将错误的信息直接暴露给用户,这样的体验可想而知,且对黑客而言,详细异常信息往往会提供非常大的帮助…

采用try-catch的方式,手动捕获异常信息,然后返回对应的结果集,相信很多人都看到过类似的代码(如:封装成Result对象);该方法虽然间接性的解决错误暴露的问题,同样的弊端也很明显,增加了大量的代码量,当异常过多的情况下对应的catch层愈发的多了起来,很难管理这些业务异常和错误码之间的匹配,所以最好的方法就是通过简单配置全局掌控….

接下来就看看 Spring Boot 提供的解决方案

1 导入依赖

在 pom.xml 中添加上 spring-boot-starter-web 的依赖即可

<dependencies>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-test</artifactId>        <scope>test</scope>    </dependency></dependencies>

自定义异常
在应用开发过程中,除系统自身的异常外,不同业务场景中用到的异常也不一样,为了与标题 轻松搞定全局异常 更加的贴切,定义个自己的异常,看看如何捕获…

package com.battcn.exception;    @Override    protected ResponseEntity<Object> handleExceptionInternal(Exception ex, Object body, HttpHeaders headers,                                                             httpstatus status, WebRequest request) {        if (ex instanceof MethodArgumentNotValidException) {            MethodArgumentNotValidException exception = (MethodArgumentNotValidException) ex;            return new ResponseEntity<>(new ErrorResponseEntity(status.value(), exception.getBindingResult().getAllErrors().get(0).getDefaultMessage()), status);        }        if (ex instanceof MethodArgumentTypeMismatchException) {            MethodArgumentTypeMismatchException exception = (MethodArgumentTypeMismatchException) ex;            logger.error("参数转换失败,方法:" + exception.getParameter().getMethod().getName() + ",参数:" + exception.getName()                    + ",信息:" + exception.getLocalizedMessage());            return new ResponseEntity<>(new ErrorResponseEntity(status.value(), "参数转换失败"), status);        }        return new ResponseEntity<>(new ErrorResponseEntity(status.value(), "参数转换失败"), status);    }}

测试

完成准备事项后,启动Chapter17Application,通过下面的测试结果可以发现,真的是 so easy,代码变得整洁了,扩展性也变好了…

访问 http://localhost:8080/test3

{"code":400,"message":"num不能为空"}

访问 http://localhost:8080/test3?num=0

{"code":400,"message":"/ by zero"}

访问 http://localhost:8080/test3?num=5

result:2

关于“SpringBoot全局异常问题如何解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: SpringBoot全局异常问题如何解决

本文链接: https://lsjlt.com/news/358353.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作