想知道这里@IgnoreResponseAdvice的意义

来源:6-3 【注重领会】基于 Feign 实现微服务调用

Malcolmli

2019-04-07

SearchController类里面方法为什么要加@IgnoreResponseAdvice
可以不加这个注解,然后方法返回类型直接用List<AdPlan>取代CommonResponse<List<AdPlan>> 吗?
图片描述

写回答

1回答

张勤一

2019-04-07

同学你好:

    这里加上 @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 群随时交流、讨论,也非常感谢同学的支持!

1
0

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

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

2136 学习 · 927 问题

查看课程