老师 这个CommonResponseDataAdvice类的两个方法不太理解

来源:4-2 【跟我一起编码】统一响应处理的开发

华山小叮当

2019-01-27

这个supports方法的返回值如果是true 就执行后面beforeBodyWrite方法 false就不执行
还有就是beforeBodyWrite方法的处理图片描述
第55行 判断的是T类型的data是否为空 57行又是判断o是不是CommonResponse类型 这个data不应该是CommonResponse中的一个属性吗 为什么会一下子这个o变成了对象中的属性 一下又变成了一个类呢

写回答

1回答

张勤一

2019-01-27

同学你好:

    首先需要知道 CommonResponseDataAdvice 的实现依赖于 Spring MVC 框架定义的org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice 接口,这里面定义了两个方法,如下所示:

public interface ResponseBodyAdvice<T> {
    boolean supports(MethodParameter var1, Class<? 
    extends HttpMessageConverter<?>> var2);

    @Nullable
    T beforeBodyWrite(@Nullable T var1, MethodParameter var2, 
    MediaType var3, Class<? extends HttpMessageConverter<?>> var4, 
    ServerHttpRequest var5, ServerHttpResponse var6);
}

    这是 Spring MVC 提供给开发者的接口,可以自行实现对 Response 响应的封装处理过程。supports 方法返回布尔类型,告诉 Spring MVC 是否需要执行该 “Advice”(Advice 在 Spring 中是有特殊含义的,标识你想要 Spring 框架提供什么功能)。

    beforeBodyWrite 是在 Response Body 返回给客户端之前(即 before body write 拆看来看)对响应对象做一些处理操作。也就是在这里将响应的 body (即第一个参数 Object o)封装为统一的响应 CommonResponse,而这里又需要给响应对象是什么做具体的处理,它可以是 null,也可以是 CommonResponse,也可以是任意对象类型等等,即代码实现中的两个 if 和一个 else。


    欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持!

1
1
华山小叮当
非常感谢!
2019-01-28
共1条回复

Spring Cloud微服务架构 设计实现广告系统

广告营销系统,未来大中型企业的标配

2143 学习 · 928 问题

查看课程