Python 官方文档:入门教程 => 点击学习
背景 在开发中,如果用try catch的方式,每个方法都需要单独实现,为了方便分类异常,返回给前端,采用了@ControllerAdvice注解和继承了RuntimeExcepti
在开发中,如果用try catch的方式,每个方法都需要单独实现,为了方便分类异常,返回给前端,采用了@ControllerAdvice注解和继承了RuntimeException的方式来实现。
捕获了三类异常
1.业务异常
BusinessException
2.系统异常
SystemException
3.其他异常
利用@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;
}
@Override
public String getMessage() {
return super.getMessage();
}
@Override
public 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;
}
@Override
public String getMessage() {
return super.getMessage();
}
@Override
public String toString() {
return this.code + ":" + this.getMessage();
}
}
ExceptionAdvice类,采用增强Controller注解 @ControllerAdvice的方式来实现
1.方法名称和返回类型都可以根据自己需要定义;
2.采用注解@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;
@ControllerAdvice
public 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;
}
}
1.我们捕获一个业务异常BusinessException,输出aaa
2.捕获系统异常
throw new SystemException("aaaa");
3.其他的try catch的异常,这个就可以捕获了
到此这篇关于SpringBoot 自定义异常并捕获异常返给前端的文章就介绍到这了,更多相关springboot 自定义异常内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: springboot 自定义异常并捕获异常返给前端的实现代码
本文链接: https://lsjlt.com/news/157242.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0