【12】关于R类的统一返回的拦截处理

关于R类的统一返回的拦截处理

分析

在实际开发中,如果你团队的人员结构不是特别多的时候,比如:1-11人等。这个其实还是很好管理。你说句话还有威信。但是随着你的公司的组织结构越来越多,你接下的架构任何变化和调整可能都会面临阻碍。这个时候你去谈威信,不好意思没几个人能够被你说服。

解决方案

看到这里,应该很多同学都应该觉得这样的封装还不错,甚至会觉得很完美。
但是其实这个是很大的问题和弊端,因为你每写一个接口或者方法,都需要进行R返回,还是蛮累的。
如果你写这种代码在公司里推广给整个公司的人去使用,估计会被吐槽。原因开发太过于强制和依赖R类。并不是什么好事,怎么优化和处理呢?
可以使用spring提供的结果拦截增强处理机制来解决这个问题,如下:
采用springboot提供的ResponseBodyAdvicel处理即可。
ResponseBodyAdvice的作用是:拦截Controller方法的返回值,统一处理返回值到响应体中,一般来做response的统一格式,加密,签名等。如下:

在使用的时候在controller的包上增加basePackages=”com.kuangstudy”,因为如果不加的话,可能给整个系统的产生冲突影响比如:如果你使用了swagger时会出现空白异常。
@ControllerAdvice(basePackages = "com.kuangstudy")
public class ResultResponseHandler implements ResponseBodyAdvice<Object> {
    /**
     * 是否支持advice功能,true是支持 false是不支持
     *
     * @param methodParameter
     * @param aClass
     * @return
     */
    @Override
    public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
        return true;
    }


    // 参数o 代表其实就是springmvc的请求的方法的结果
    @Override
    public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {

        // 对请求的结果在这里统一返回和处理
        return R.success(o);
    }
}

在这里插入图片描述

结果
{
  "code": 200,
  "data": {
    "id": 1,
    "nickname": "yykk",
    "password": ".***",
    "avatar": null,
    "address": "梅州"
  },
  "message": "成功!"
}

ResponseBodyAdvice

它是利用spring中的AOP机制来完成的一种,对springmvc请求过程中对请求方法的结果进行增强的一种通知。它会对你的结果进行加密,加工等处理,把加工的数据返回给浏览器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值