Springmv SpringBoot Restful接口返回结果统一封装统一异常封装

问题背景

  • 在web开发过程中,我们常常会提供两类接口。一类是内部接口,这类接口主要为web页面服务的,web前端可以通过ajax等手段进行后台数据的获取并渲染页面;另一类接口主要是供第三方使用,以便于与第三方系统集成。
  • 但不管是哪一种接口,不管返回数据内容如何千变万化, 为了保证返回数据的可读性,通常都会采用统一的格式封装数据值。
    期望封装格式如下:
{
“data”: Obj,
“errorCode”: 0,
“message”: “数据获取成功”
}
  • 这样一来,不管接口获取的是什么数据(文件流、字符串(非json形式的字符串)除外),序列化后的数据本身都仅仅是一个更大的json对象的data字段而已,与data字段处于同一级别的额外信息还包括errorCode、message、success等字段。
  • 采用统一的数据格式封装数据的好处不言而喻。比如在ajax调用数据成功以后,ajax根据返回的数据的errorCode字段是0还是其他错误编码,分别弹出不同颜色的提示框,以便区分数据到底是获取成功还是获取失败。
  • 然后,这个弹出的提示框往往会有一条提示信息,以便让用户知道,这个接口是什么原因导致调用失败的,而用于渲染提示框的提示信息,一般就取自message字段。

使用springmvc实现结果统一装配

从spring mvc 4.0起引入RequestBodyAdvice和ResponseBodyAdvice这两个接口。

  • RequestBodyAdvice主要用于对请求参数的增强处理。
  • ResponseBodyAdvice用于对响应参数的增强处理。
  1. 实现ResponseBodyAdvice
    在这里插入图片描述
    supports方法实现表明,只有序列化框架是Jackson才对返回结果进行增强,具体项目中使用了哪一种序列化框架,修改该方法的实现即可。
    在这里插入图片描述
    beforeBodyWrite方法表明,Jackson序列化框架序列化的是增强的结果对象,而不是Restful接口方法返回值代表的那个对象。
    在这里插入图片描述
  2. 增加@ControllerAdvice注解,由Spring管理
    在这里插入图片描述
  3. 代码对比
    先看统一返回前的代码:
    在这里插入图片描述
    统一返回后的:
    在这里插入图片描述
    如上述代码所示,使用springmvc的结果统一装配功能后,对于有返回值的方法,需要返回什么类型的数据,则直接返回指定类型的对象实例即可。逻辑清晰明了,不需要每一个方法都返回千篇一律的MessageBean对象。

异常处理统一封装

  1. 创建异常处理工具类
    增加BaseExceptionHandleAction类,并在类中同时使用@ExceptionHandler和@ResponseBody注解声明异常处理,示例代码如下:
    在这里插入图片描述
  2. 需要处理异常的控制器继承该类
    在这里插入图片描述
    然后,假如前端未传入状态status,前端收到的响应字符串如下:
{
“errorMsg “: “禁止操作”
“errorCode” : 403
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

prefectjava

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值