Spring Boot 自定义应用开发框架二—— 异常统一处理

接上一篇继续搭建项目,项目中的肯定有需要处理异常的地方,而再前后端分离的项目中,要将后台返回的数据统一格式提供给前端,前端才好统一处理信息,那么异常的处理也就必须统一。

Spring boot 统一处理异常非常方便,只要通过注解@RestControllerAdvice 即可,就以上一篇更新信息的异常为例:

一、定义一个异常处理类 

public class HnException extends RuntimeException {

	private static final long serialVersionUID = 4249136427541564896L;
	Logger logger = LoggerFactory.getLogger(this.getClass());
	private String code;

	public HnException(final String code) {
		super(code);
		this.code = code;
		this.logger.error("异常错误:" + this.code);
	}

	public HnException(final String code, final Throwable t) {
		super(code, t);
		this.code = code + " : " + t.getMessage() + " : " + t.getStackTrace()[0];
		this.logger.error("异常错误:" + this.code);
	}

	public HnException(final Throwable t) {
		super(t);
		this.code = t.getMessage() + " : " + t.getStackTrace()[0];
		this.logger.error("异常错误:" + this.code);
	}

	public String getCode() {
		return this.code;
	}

	public void setCode(final String code) {
		this.code = code;
	}
}

二、定义一个全局异常处理类(类似拦截器)

@RestControllerAdvice
public class HnExceptionAdvice {

	@ExceptionHandler(HnException.class)
	public AjaxResponse hnRuntimeException(final HnException exception) {
		return new ErrorResponse(exception.getCode());
	}
}

三、修改update的异常处理代码

    @PostMapping("update")
	public AjaxResponse update(final String name) {
		try {
			System.out.println(1 / 0 + "修改一条数据姓名为:" + name);
		} catch (final Exception e) {
			e.printStackTrace();
			throw new HnException("修改数据异常:" + e.getMessage());
		}
		return new SucceedResponse();
	}

重启项目后运行结果如下,说明已经全局异常处理起作用了

PS:如果按照上面步骤,全局异常不起作用,检查启动类中是否将异常处理类的路径包含。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值