老师 这个CommonResponseDataAdvice类的两个方法不太理解
来源:4-2 【跟我一起编码】统一响应处理的开发

华山小叮当
2019-01-27
这个supports方法的返回值如果是true 就执行后面beforeBodyWrite方法 false就不执行
还有就是beforeBodyWrite方法的处理
第55行 判断的是T类型的data是否为空 57行又是判断o是不是CommonResponse类型 这个data不应该是CommonResponse中的一个属性吗 为什么会一下子这个o变成了对象中的属性 一下又变成了一个类呢
1回答
-
同学你好:
首先需要知道 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 群随时交流、讨论,也非常感谢同学的支持!
112019-01-28
相似问题