请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

接口疑问?

老师,下午好,请教一个问题,

public class LoginAdminGatewayFilter implements GatewayFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ....
        if (token == null || token.isEmpty()) {
            LOG.info("token为空,请求被拦截");
            exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
            return exchange.getResponse().setComplete();
        }
        ...
    }
}

请问一下老师,这里 exchange.getResponse() 的返回值 是interface ServerHttpResponse类型,为什么可以 .setStatusCode(HttpStatus.UNAUTHORIZED); 呢?

我知道老师你已经答过了,我也按照你的方法做了,还是不能解答我的疑问。

我的疑问是 exchange.getResponse() 的返回值 是interface, 而不是 class,这时是没办法实例化一个 interface的呀,怎么可以调用它的setStatusCode()呢, setStatusCode()方法还没有实现呀?

谢谢老师解答 !

正在回答

插入代码

1回答

甲蛙 2020-11-04 10:16:47

这个接口有相应的实现类,具体可以去研究它的源码。实际执行是实现类来执行。

面向接口编程。有很多类似的例子,比如打日志,我们所有LOG.info,你点进info,可以看到它也是个接口,slf4j实际就是定义了一套接口,内部的实现可以配置成logback或log4j

0 回复 有任何疑惑可以回复我~
  • 提问者 慕神4535282 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-11-04 18:37:12

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号