provicer生产者代码
其中的DataNotFoundException继承了BusinessException
DataNotFoundException的编码以及错误信息: PUBLIC_DATA_NOT_FOUND(1001,"数据没有找到")
consumer消费者代码
上面的code为1401,是系统异常编码,并不是DataNotFoundException编码
我们定义的DataNotFoundException的编码为:1001
我们来分析一些代码
if (appResponse.hasException() && GenericService.class != invoker.getInterface())
上面代码的含义就是如果有异常并且未实现GenericService接口,进入后续判断逻辑,否则直接返回结果。
上面代码的含义就是不是RuntimeException类型的异常,并且是受检异常(继承Exception),直接抛出。
上面代码的含义就是在方法签名上有声明,直接抛出
上面代码的含义就是如果异常类和接口类在同一个jar包中,直接抛出
上面代码的含义就是以java.或javax.开头的异常直接抛出
上面代码的含义就是dubbo自身的异常,直接抛出。
2、在此处加上一段代码来过滤我们项目中的异常,以免被dubbo重新封装
3、在resources目录下添加纯文本文件META-
INF/dubbo/com.alibaba.dubbo.rpc.Filter并添加内容
dubboExceptionFilter=com.rainbow.goods.server.filter.DubboExceptionFilter
4、修改dubbo 的配置文件,将DubboExceptionFilter加载进去并且去掉自身的ExceptionFilter
上面exception就是dubbo默认的处理异常的filter,前面-号就代表去除
我们修改后,在运行
抛出的是我们自定义的异常了,再看看消费端的异常处理最终显示
确实是我们定义的DataNotFoundException业务异常的编码和信息。