想知道这里@IgnoreResponseAdvice的意义
来源:6-3 【注重领会】基于 Feign 实现微服务调用

Malcolmli
2019-04-07
SearchController类里面方法为什么要加@IgnoreResponseAdvice
可以不加这个注解,然后方法返回类型直接用List<AdPlan>取代CommonResponse<List<AdPlan>> 吗?
写回答
1回答
-
同学你好:
这里加上 @IgnoreResponseAdvice 注解是 “有意为之”,是为了讲解这个注解的用法。可以回顾下统一响应代码(CommonResponseDataAdvice.java)中 supports 方法的实现:
/** * <h2>判断是否需要对响应进行处理</h2> * @return false: 不需要处理; true: 需要处理 * */ @Override @SuppressWarnings("all") public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) { // 如果当前方法所在的类标识了 IgnoreResponseAdvice 注解, 则不需要处理 if (methodParameter.getDeclaringClass().isAnnotationPresent( IgnoreResponseAdvice.class )) { return false; } // 如果当前方法标识了 IgnoreResponseAdvice 注解, 则不需要处理 if (methodParameter.getMethod().isAnnotationPresent( IgnoreResponseAdvice.class )) { return false; } // 对响应进行处理, 执行 beforeBodyWrite 方法 return true; }
可以看到,这里对 @IgnoreResponseAdvice 这个注解进行了判断,添加了这个注解的类或者方法,都不会被统一响应拦截。所以,正如你所说,如果不加这个注解的话,返回类型是 List<AdPlan>,而不是 CommonResponse<List<AdPlan>> 。
那么,为什么会有这个注解呢?原因是,代码中做了统一响应的处理。但是,对于某些特殊情况,可能不需要统一的响应,就是返回自定义的响应数据。这时候,@IgnoreResponseAdvice 注解就派上用场了,在 Controller 类上或者方法上,加上注解就好啦!
欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持!
10
相似问题