坑!千万要检查这个地方!!

背景:

  远程调用服务时,同一个Controller下的接口有的调用成功,有的调用失败,失败的错误原因为空指针。看下边这段代码

    @PostMapping(value = "/draft")
    @ApiOperation("存草稿")
    private Response<Long> Draft(@RequestBody ItemPublishCreateRequest request) {
        return itemPublishFacade.saveDraft(request);
    }

  我这段代码中itemPublishFacade.saveDraft(request) 是其他服务的接口,当我调用这个接口的时候为什么itemPublishFacade为空?

解释:

  项目用的是dubbo,前提是我已经注册了这个服务,但是调用的时候仍然是null。Facade是service的上一层次我们自己包装的。

    @Bean
    public ItemPublishFacade itemPublishFacade(){
        return serviceSubscriber.consumer(ItemPublishFacade.class).checked(false).subscribe();
    }

  我从注册这个服务开始到aop切面,解决了一天都没找到到底出错在哪儿,但是他其实就是很小的一个问题,检查起来却花费了很多的时间,真的是不可原谅的错误。

  我不说有什么问题,你们自己能看出来为什么会出错吗?

解决:

  问题出在的接口的访问级别,如果方法被标记为 private,那么它将不会被暴露给外部调用,包括 Dubbo 消费者。
  结果是,当尝试通过 Dubbo 调用此方法时,将会因为找不到对应的方法而失败。

    @PostMapping(value = "/draft")
    @ApiOperation("存草稿")
    private Response<Long> Draft(@RequestBody ItemPublishCreateRequest request) {
        return itemPublishFacade.saveDraft(request);
    }


    @PostMapping(value = "/draft")
    @ApiOperation("存草稿")
    public Response<Long> Draft(@RequestBody ItemPublishCreateRequest request) {
        return itemPublishFacade.saveDraft(request);
    }

这样对比看是不是比较容易看出来了。只有用public才能供外部调用,大家一定要仔细。通过这个文章也可以在遇到这个问题快速解决问题了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值