springboot如何自定义异常并捕获异常返给前端
小编给大家分享一下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,就是捕获的异常类型,我们只需要把需要捕获异常类型写进来就好
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
捕获系统异常
throw new SystemException("aaaa");
其他的try catch的异常,这个就可以捕获了
以上是“springboot如何自定义异常并捕获异常返给前端”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341