Dubbo 源码剖析与实战
何辉
平安壹钱包架构师
4711 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
开篇词 (1讲)
Dubbo 源码剖析与实战
15
15
1.0x
00:00/00:00
登录|注册

07|参数验证:写个参数校验居然也会被训?

你好,我是何辉。今天我们探索 Dubbo 框架的第六道特色风味,参数验证。
说到参数校验,相信你一定是又爱又恨。在发送或接收请求的时候,必要的参数校验可以拦截非法请求,提升请求质量,这样一个简单的数值比对逻辑看起来很简单,但写的过程却很枯燥和乏味,一不留神就会导致一些必要性校验没考虑到。
现在你的同事小马就因为漏写了参数校验被老大训话了,来看他写的一段消费方调用提供方的代码:
///////////////////////////////////////////////////
// 消费方的一段调用下游 validateUser 的代码
///////////////////////////////////////////////////
@Component
public class InvokeDemoFacade {
@DubboReference
private ValidationFacade validationFacade;
// 一个简单的触发调用下游 ValidationFacade.validateUser 的方法
public String invokeValidate(String id, String name, String
// 调用下游接口
return validationFacade.validateUser(new ValidateUserInfo(id, name, sex));
}
}
///////////////////////////////////////////////////
// 提供方的一段接收 validateUser 请求的代码
///////////////////////////////////////////////////
@DubboService
@Component
public class ValidationFacadeImpl implements ValidationFacade {
@Override
public String validateUser(ValidateUserInfo userInfo) {
// 这里就象征性地模拟一下业务逻辑
String retMsg = "Ret: "
+ userInfo.getId()
+ "," + userInfo.getName()
+ "," + userInfo.getSex();
System.out.println(retMsg);
return retMsg;
}
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了Dubbo框架中参数验证的重要性和实际应用。通过具体案例和代码示例,介绍了参数验证的必要性,以及消费方和提供方在参数验证方面存在的问题。文章提出了三种验证方案:简单验证、省事点的处理方式以及更高级的解决方案。通过分析Dubbo框架的源码,发现了现成的工具ValidationFilter,可以用于参数校验。同时,探讨了使用事件通知机制进行参数校验的可行性,并提出了自行实现一套校验机制的想法。总结了参数验证的应用场景,包括单值简单规则判断、降低无谓的脏请求、通用网关校验领域。整体而言,本文通过具体案例和代码示例,深入浅出地介绍了参数验证在软件开发中的重要性和实际应用,为读者提供了有益的技术参考。文章还通过Dubbo框架的事件通知机制解释了为何重试机制不会触发多次,为读者提供了更深入的技术理解。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Dubbo 源码剖析与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • Lum
    看到这里 其实对invocation,filter为啥会执行invoke等代码逻辑还是不太清楚,先插个眼,看完后总结一下

    作者回复: 你好,Lum:可以的,多看几眼,理解理解一下,说不定一下就通透了~

    2023-02-28归属地:北京
  • 星期八
    @DubboService(validation = "jvalidation") 用代码测试了一下,在提供者不生效 什么情况!@DubboReference(validation = "jvalidation") 客户端是生效的

    作者回复: 你好,星期八:抱歉这么晚回复你,主要前段时间电脑拿去修理了,按照你的描述,我不确定是不是我上传的代码是否有问题,等一拿到电脑后,我立马试了下上传的工程代码是可以的。 我在想,你是不是在本地调试来调试去,本地缓存没清理干净造成的呀?我自己在工程里面试了下,提供方使用【@DubboService(validation = "jvalidation")】,然后在消费方使用【@DubboReference】,这样是可以试出来提供方生效的,你要不再试试看~

    2023-02-22归属地:浙江
    2
  • Six Days
    思考题:Spring 的切面中完成对参数的统一验证? 根据本文中作者着重梳理通用验证思路,可以在项目中自定义注解定义校验参数的标准,可通过自定义注解标记AOP拦截的切入点,识别拦截点之后,可在方法调用前进行自定义的参数校验逻辑;在项目内可通过自定义注解实现参数的统一验证,有利于代码的维护

    作者回复: 你好,Six Days:你理解的非常透彻,有了思路后只不过就是换了一个地方(Spring)进行参数验证而已,点赞~

    2023-01-29归属地:广东
    2
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部