dubbo参数校验&统一异常转response处理

官方的参数校验方法

https://cn.dubbo.apache.org/zh-cn/docs/advanced/parameter-validation/

目标:能把参数校验异常、自定义异常转化为自定义的response结构。

目标A:增加统一异常处理:

Dubbo自定义异常全局统一处理_还不快去敲代码啊的博客-CSDN博客_dubbo异常统一处理

可以把Fitler文件中定义的加入到<dubbo:provider filter="xxx"> 也可以直接用@Active

这样之后发现普通的抛出异常可以catch,但是参数校验的异常直接catch不到,原因大概是默认的参数校验filter在异常处理filter之前就返回了。

目标B:为了能把异常统一转化为response:

第一种方案:直接实现一个参数校验filter,在其中转换为response

Dubbo服务如何优雅的校验参数_51CTO博客_dubbo指定服务提供者

第二种方案:把官方的全局异常处理放到最前面

https://www.cnblogs.com/mumuxinfei/p/9231310.html

存在的问题有:

1)自定义异常会在dubbo自带的ExceptionFIlter中被转成runtimeException,见

https://blog.csdn.net/zidongxiangxi/article/details/108098173

2)validation异常会包在rpcException里面,见官方实例

参数校验 | Apache Dubbo

因此只能采用方案一:自定义exceptionFilter取代自带的异常处理,也可以在dubbo自带的基础上增加转换response的逻辑

Dubbo Filter 过滤器 —— 自定义异常过滤器(ExceptionFilter)_zhibo_lv的博客-CSDN博客_dubbo 异常filter

网上还看到自定义的fitler可以覆盖自带filter ,但是实测有问题:会走到ExtensionLoader的判重逻辑里面,报

Duplicate extension

dubbo 提供者覆盖Filter或者拓展。_一枚软的硬币的博客-CSDN博客_org.apache.dubbo.rpc.filter文件覆盖问题

 参考阅读 使用dubbofiler实现日志调用链追踪

基于dubbo的filter过滤器实现微服务日志追踪,以及实现原理_LxyrichBos的博客-CSDN博客_微服务filter

附:filter加载过程

1)ExtensionLoader.loadExtensionClasses

        loadFile(extensionClasses, DUBBO_INTERNAL_DIRECTORY);
        loadFile(extensionClasses, DUBBO_DIRECTORY);
        loadFile(extensionClasses, SERVICES_DIRECTORY);

会读读取各个jar包和代码中的META-INF

先读内部的,再读外部的。最候用filter文件中的key value,放进

2)在getActivateExtension中,对每个接口去组装filter链

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值