这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战
前言
- 在正常的开发过程中,因为前端展示的界面多种多样,所以数据会有各种各样的结构,如果后台对数据不加封装的情况下,数据格式就会千奇百怪,最终会降低开发效率,因此需要统一格式.
- 在程序发生异常的情况下, 异常信息提示的格式,很大程度上也和正常返回不一致(和全局异常处理一起阅读更佳),所以需要统一格式
- 在业务进行中,有些接口请求成功,但是因为业务需要,需要返回一些特殊的状态,在统一了数据格式之后,前端可以在请求入口对这些状态统一的处理.所以需要统一格式
实现思路
- 在项目我我们常常封装一个返回对象类,在类中定义好标准的数据格式.
正常情况下,我们会将定义三个参数code
,msg
,data
.
data
用于存防业务数据,
code
用来展示统一定义的状态码
msg
用来展示一些基础的成功或者失败信息
2. 也会创建一个状态码枚举类,类似这样
1 | arduino复制代码public enum ResultCode { |
一般对于中小型公司的中小型项目,正常的状态和异常的状态各个定义一个就好,全靠msg展示信息是没问问题的, 如果有问题的话就去看alibaba出品的java规范.
返回数据的多种实现
(1) Object接收各种数据
1 | typescript复制代码public class R implements Serializable { |
使用方式
1 | arduino复制代码R.OK("数据1"); |
或许你看到的是这种,这种如果存在多个数据,只能手动创建一个Map然后将数据放到data中
1 | arduino复制代码public class R<T> implements Serializable { |
(2) Map接收数据
1 | typescript复制代码public class R extends HashMap<String, Object>{ |
这种数据格式就是利用了map来做返回对象,可以想map一样操作他
1 | arduino复制代码R.OK("数据1"); |
(3) 实现ResponseBodyAdvice
并注解@RestControllerAdvice
这种方法比较少见,并且在实际使用过程中,如果沟通不畅出现问题的几率是比较大的
1 | typescript复制代码@RestControllerAdvice |
这个的使用方式就是;在cotroller想怎么写就怎么写,在MyResponseAdvice
会自动封装.
配合全局异常处理需要做的地方
详见指定文章的指定两个部分:
1.拦截404或者服务器错误等未进入controller的异常
1 | arduino复制代码 作者:ZOUZDC |
本文转载自: 掘金