最近偶然间在看到 Spring 官方文档的时候,新学到一个注解 @ControllerAdvice
,并且成功使用这个注解重构我们项目的对外 API 接口,去除繁琐的重复代码,使其开发更加优雅。
展示具体重构代码之前,我们先来看下原先对外 API 接口是如何开发的。
这个 API 接口主要是用来与我们 APP 交互,这个过程我们统一定义一个交互协议,APP 端与后台 API 接口统一都使用 JSON 格式。
另外后台 API 接口对 APP 返回时,统一一些错误码,APP 端需要根据相应错误码,在页面弹出一些提示。
下面展示一个查询用户信息返回的接口数据:
{
"code": "000000",
"msg": "success",
"result": {
"id": "1",
"name": "test"
}
}
复制代码
复制代码
code
代表对外的错误码,msg
代表错误信息,result
代表具体返回信息。
前端 APP 获取这个返回信息,首先判断接口返回 code
是否为 000000,如果是代表查询成功,然后获取 result
信息作出相应的展示。否则,直接弹出相应的错误信息。
重构之前
下面我们来看下,重构之前的,后台 API 层的如何编码。
/**
* V1 版本
*
* @return
*/
@RequestMapping("testv1")
public APIResult testv1() {
try {
User user = new User();
user.setId("1");
user.setName("test");
return APIResult.success(user);
} catch (APPException e) {
log.error("内部异常", e);
return APIResult.error(e.getCode(), e.getMsg());
} catch (Exception e) {
log.error("系统异常", e);
return APIResult.error(RetCodeEnum.FAILED);
}
}
复制代码
复制代码
上面的代码其实很简单,内部统一封装了一个工具类 APIResult
,然后用其包装具体的结果。
@Data
public class APIResult<T> implements Serializable {
private static final long serialVersionUID = 4747774542