利用注解实现 Grpc 数据验证 #4821
huangdijia
started this conversation in
Show and tell
Replies: 2 comments 5 replies
-
Beta Was this translation helpful? Give feedback.
0 replies
-
厉害 学习了 |
Beta Was this translation helpful? Give feedback.
5 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Hyperf 对提供了好用的表单验证组件,使得表单验证更简单,不再是各种
if-else
。最近项目组使用到了 Grpc Server,从源码和实例代码看,Grpc Server 是继承了 Http Server。
于是我开始思考,Grpc 的请求是不是也可以跟 HTTP 请求一样。后来发现注入的 HiUser 不是一个标准的
Request
,而是Google/Protobuf/Message
。前面提到,Grpc Server 是继承了 Http Server,于是我把思路转向了中间件。经过测试,思路没毛病,但是遇到一个问题,怎么把标准的 Request 转为 Validator 能识别的 data (array 类型)?
经过源码分析,让我看到了一点希望(Hyperf/Grpc/Parser),1 分钟之后又让我彻底放弃了。原因是我在中间件这个环节无法知道 Message 的类名,无法通过
Hyperf/Grpc/Parser::deserializeMessage()
反向序列化出我需要的 message。最后把希望寄托到了“万能的 AOP”,对控制器的方法做拦截,结合注解实现:
或者复用已有的 fromRequest
下面分享一下我的实现代码:
为什么不直接用 Hyperf 表单验证组件的异常?因为在 ExceptionHandler 里对它做了特殊处理,会导致 Grpc 响应无法解析。
就分享到这里了。
Beta Was this translation helpful? Give feedback.
All reactions