为什么要统一接口返回数据结构
接口上方便后端与前端交互,同时也美化了后端接口返回的数据。
设计
{
"status":{
"code":0,
"name":"OK",
"msg":"succeed"
},
"data": object
}
status 返回接口状态相关信息
data 返回具体请求的业务数据
code状态码
可以根据需求去设计自己的错误类型,如下面这个例子:
1000~1999 区间表示参数错误
2000~2999 区间表示用户错误
3000~3999 区间表示接口异常
这样可以根据状态码大概就能知道是什么类型的错误。
name 状态码名称
与code一起设计,光看code数字有时可能会有点晕,看name简洁明了
msg 错误信息
捕获到异常报错信息,进一步封装成满足需求的的友好的错误提示。
实现思路
具体代码查看 ApiResp封装Demo github
封装ApiResp,Status类,然后通过@ControllerAdvice注解,实现ResponseBodyAdvice,对接口返回数据进行重写。
@ControllerAdvice注解很有意思,下次要写的统一封装异常返回也用到这个注解。
使用方式
看代码并没有做什么封装处理,但是因为底层我们已经拦截(@ControllerAdvice ResponseBodyAdvice)并重写了,所以返回数据已经是按照我们定义的格式了。
@RestController
@RequestMapping(value = "/api/example/v1")
public class ExampleController {
@GetMapping(value = "/resp/rewrite")
public List<String> apiRespExample() {
return Lists.newArrayList("hello", "world");
}
}
请求接口返回数据:
{
"status":{
"code":0,
"name":"OK",
"msg":"succeed"
},
"data":[
"hello",
"world"
]
}