我们在用SpringBoot的时候,通常使用的Validation来做校验;那么在dubbo的rpc调用中呢?其实是一样的。但是需要开启校验。开启方式如下两种:
一: 在 @org.apache.dubbo.config.annotation.Service指定:
@Service(version = "1.0.0", protocol = "dubbo", validation ="true")
; 然后同时在consumer的@Reference中指定,'@Reference(version = "1.0.0", protocol = "dubbo", validation = "true")';二: 全局指定消费者验证,在yml中指定'dubbo.consumer. validation'
dubbo:
consumer:
validation: true
【备注: 最好在provider和consumer都开启,否则可能会存在序列化出错等问题】
来自
芋道
的总结我觉得挺好,如下:
推荐:如果胖友想把 Dubbo 服务消费者的所有 Service 服务的参数校验都开启,可以修改application.yaml
配置文件,增加dubbo.consumer.validation = true
配置。
可能胖友会有疑惑,服务提供者和服务消费者的 validation = true
,都是开启参数校验规则,会有什么区别呢?Dubbo 内置 ValidationFilter 过滤器,实现参数校验的功能,可作用于服务提供者和服务消费者。效果如下:
- 如果服务消费者开启参数校验,请求参数校验不通过时,结束请求,抛出 ConstraintViolationException 异常。即,不会向服务提供者发起请求。
- 如果服务提供者开启参数校验,请求参数校验不通过时,结束请求,抛出 ConstraintViolationException 异常。即,不会执行后续的业务逻辑。
实际项目在使用时,至少要开启服务提供者的参数校验功能。
摘自: https://www.iocoder.cn/Spring-Cloud-Alibaba/Dubbo/?github