广告
返回顶部
首页 > 资讯 > 精选 >springboot如何自定义异常并捕获异常返给前端
  • 476
分享到

springboot如何自定义异常并捕获异常返给前端

2023-06-25 14:06:11 476人浏览 安东尼
摘要

小编给大家分享一下SpringBoot如何自定义异常并捕获异常返给前端,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!背景在开发中,如果用try catch的方式,

小编给大家分享一下SpringBoot如何自定义异常并捕获异常返给前端,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

背景

开发中,如果用try catch的方式,每个方法都需要单独实现,为了方便分类异常,返回给前端,采用了@ControllerAdvice注解和继承了RuntimeException的方式来实现。

实现内容

捕获了三类异常
1.业务异常

          BusinessException

系统异常 

        SystemException

其他异常

        利用@ExceptionHandler(RuntimeException.class)去捕获

ExceptionAdvice类捕获以上三类异常,并返回自定义类型格式数据

实现代码

业务异常BusinessException类实现方式,继承RuntimeException

public class BusinessException extends  RuntimeException {private String code; public BusinessException() {super();} public BusinessException(String message) {super(message);} public BusinessException(String code, String message) {super(message);this.code = code;} public BusinessException(Throwable cause) {super(cause);} public BusinessException(String message, Throwable cause) {super(message, cause);} public BusinessException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {super(message, cause, enableSuppression, writableStackTrace);} public String getCode() {return code;} public void setCode(String code) {this.code = code;} @Overridepublic String getMessage() {return super.getMessage();} @Overridepublic String toString() {return this.code + ":" + this.getMessage();}}

系统异常SystemException类实现方式,继承RuntimeException,同业务异常类的实现方式一样

public class SystemException extends  RuntimeException {private String code; public SystemException() {super();} public SystemException(String message) {super(message);} public SystemException(String code, String message) {super(message);this.code = code;} public SystemException(Throwable cause) {super(cause);} public SystemException(String message, Throwable cause) {super(message, cause);} public SystemException(String message, Throwable cause,                           boolean enableSuppression, boolean writableStackTrace) {super(message, cause, enableSuppression, writableStackTrace);} public String getCode() {return code;} public void setCode(String code) {this.code = code;} @Overridepublic String getMessage() {return super.getMessage();} @Overridepublic String toString() {return this.code + ":" + this.getMessage();}}

ExceptionAdvice类,采用增强Controller注解 @ControllerAdvice的方式来实现

方法名称和返回类型都可以根据自己需要定义

采用注解@ExceptionHandler,就是捕获的异常类型,我们只需要把需要捕获异常类型写进来就好

springboot如何自定义异常并捕获异常返给前端

 ExceptionAdvice 具体代码实现如下:

import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.WEB.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.ResponseBody; @ControllerAdvicepublic class ExceptionAdvice {    public static Logger logger = LoggerFactory.getLogger(ExceptionAdvice.class);     @ResponseBody    @ExceptionHandler(SystemException.class)    public Result handleException(Exception e) {        logger.error("系统异常信息:", e);        Result result = new Result();        if (e instanceof BusinessException) {            e = (BusinessException) e;            result.setCode(((BusinessException) e).getCode());        }        result.setFailed(e.getMessage());        return result;    }     @ExceptionHandler(RuntimeException.class)    @ResponseBody    public Result handleException(RuntimeException e) {        logger.error("异常信息:", e.getMessage());        Result result = new Result();        result.setStatus(500);        result.setMessage(e.getMessage());        return result;    }     @ExceptionHandler(BusinessException.class)    @ResponseBody    public ajaxJSON doBusinessException(Exception e) {        Ajaxjson ajaxJson = new AjaxJson();        logger.error("业务异常消息:", e.getMessage());        ajaxJson.setRet(-1);        ajaxJson.setMsg(e.getMessage());        return ajaxJson;    } }

测试代码

我们捕获一个业务异常BusinessException,输出aaa

springboot如何自定义异常并捕获异常返给前端

 springboot如何自定义异常并捕获异常返给前端

捕获系统异常

throw new SystemException("aaaa");

其他的try catch的异常,这个就可以捕获了 

springboot如何自定义异常并捕获异常返给前端

以上是“springboot如何自定义异常并捕获异常返给前端”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: springboot如何自定义异常并捕获异常返给前端

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

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

  • 微信公众号

  • 商务合作