ProtoBuf 解析 没有源 pb 文件

2021-09-15 15:28:48 +08:00
 lslvxy

对接方给了个接口文档

说明 类型 序号
姓名 STRING 4
性别 INT 5
生日 STRING 7
手机号码 STRING 8

只有 pb 说明,没有源文件 我按照这个文档自己建一个 pb 文件可以么? 关机我不知道他们的 key 名字,只有中文说明 如果建的 key 不一样可以解析么

message Request {
    string name = 4;
    int32 sex = 5;
    string birthday = 7;
    string phone = 8;
}
1027 次点击
所在节点    问与答
13 条回复
TtTtTtT
2021-09-15 15:48:56 +08:00
只有序号有用,名字叫啥只是跟你生成的代码有关,和传输的数据无关。
Jokerrrrrr
2021-09-15 15:50:32 +08:00
还有这样对接的嘛
MegrezZhu
2021-09-15 15:56:14 +08:00
大概可以用 Reflection 或者 Descriptor 强行搞?
但为啥只给 pb 说明呢……
virusdefender
2021-09-15 16:06:14 +08:00
去要啊,可能就是忘了给了
securityCoding
2021-09-15 16:15:59 +08:00
通用的 ,v2/v3 试一下就可以
lslvxy
2021-09-15 16:31:47 +08:00
@TtTtTtT 我测试了下是只有序号有用的,接口文档给的太粗糙了,太难理解
![]( https://gitee.com/lslvxy/pics/raw/master/imgs/2021-09/20210915163128.png)
这个怎么理解啊
TtTtTtT
2021-09-15 16:35:25 +08:00
@lslvxy 就是 byte[]再解析成下面那个对象。
因为 protobuf 对于多态的支持有点弱,一般都是先转换成 ByteString,再塞到一个 bytes 的 field 里。
lslvxy
2021-09-15 16:38:32 +08:00
@TtTtTtT 那我 httpclient 调用 要先把下面的对象 build 之后 toByteArray()再塞到上面的 bytes 里面再 toByteArray()发出去么
TtTtTtT
2021-09-15 16:42:18 +08:00
@lslvxy 唔,是的。
不过你如果是调用方的话,不考虑他们的那种多态设计,字段直接引用对象也是可以的。在 Protobuf 内部,bytes 和 message type 的类型是一样的。
lslvxy
2021-09-15 16:50:33 +08:00
@TtTtTtT 我这边用 httpclient 测试了发送二进制数据过去了,拿到了一个 response 二进制数组
[120, -25, 122, 110, 80, 120, -41, -120, 113, 113, 113, 113, 113, 113, 113, 127, 110, 109, 14, 27, 13, 0, 1, 2, 13, 27, 80, 7, 13, 80, 2, 11, 4, 4, 95, 95, 95]

解析出来 是� ��������� response is null!!! 前面一串是乱码,后面一部分是正常的
业务 response 二级结构:
说明 类型 序号
返回码 INT 1
返回内容 STRING 2
TtTtTtT
2021-09-16 10:28:17 +08:00
@lslvxy 不知道返回的是啥,解析了一下前面几个 Byte,到 110 就卡住了。
int 1 对应的是 8,string 2 对应的是 18 。
lslvxy
2021-09-16 13:45:12 +08:00
@TtTtTtT 这个我解决好了,pb3 层嵌套的,文档太粗糙了,干
sikong31
2021-09-16 17:24:13 +08:00
如果你是想知道其他序号什么类型 可以用这个 https://github.com/mildsunrise/protobuf-inspector 数据够多一般都能搞出来

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/802045

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX