AOP在SpringBoot中的使用
使用切面管理异常的原因:
今天的内容干货满满哦~并且是我自己在平时工作中的一些问题与解决途径,对实际开发的作用很大,好,闲言少叙,让我们开始吧~~
我们先看一张错误信息在APP中的展示图:
是不是体验很差,整个后台错误信息都在APP上打印了。
作为后台开发人员,我们总是在不停的写各种接口提供给前端调用,然而不可避免的,当后台出现BUG时,前端总是丑陋的讲错误信息直接暴露给用户,这样的用户体验想必是相当差的(不过后台开发一看就知道问题出现在哪里)。同时,在解决BUG时,我们总是要问前端拿到参数去调适,排除各种问题(网络,Json体错误,接口名写错……BaLa……BaLa……BaLa)。在不考虑前端容错的情况下。我们自己后台有没有优雅的解决这个问题的方法呢,今天这篇我们就来使用AOP统一对异常进行记录以及返回。
SpringBoot引入AOP
在SpringBoot中引入AOP是一件很方便的事,和其他引入依赖一样,我们只需要在POM中引入starter就可以了:
<!--spring切面aop依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
返回体报文定义
接下来我们先想一下,一般我们返回体是什么样子的呢?或者你觉得一个返回的报文应该具有哪些特征。
成功标示:可以用boolean型作为标示位。
错误代码:一般用整型作为标示位,罗列的越详细,前端的容错也就能做的更细致。
错误信息:使用String作为错误信息的描述,留给前端是否展示给用户或者进入其他错误流程的使用。
结果集:在无错误信息的情况下所得到的正确数据信息。一般是个Map,前端根据Key取值。
以上是对一个返回体报文一个粗略的定义了,如果再细致点,可以使用签名进行验签功能活着对明文数据进行对称加密等等。这些我们今天先不讨论,我们先完成一个能够使用的接口信息定义。
我们再对以上提到这些信息做一个完善,去除冗余的字段,对差不多的类型进行合并于封装。这样的想法下,我们创建一个返回体报文的实体类。
public class Result<T> {
// error_code 状态值:0 极为成功,其他数值代表失败
private Integer status;
// error_msg 错误信息,若status为0时,为success
private String msg;
// content 返回体报文的出参,使用泛型兼容不同的类型
private T data;
public Integer getStatus() {
return status;
}
public void setStatus(Integer code) {
this.status = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getData(Object object) {
return data;
}
public void setData(T data) {
this.data = data;
}
public T getData() {
return data;
}
@Override
public String toString() {
return