对接方给了个接口文档
说明 | 类型 | 序号 |
---|---|---|
姓名 | 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;
}
1
TtTtTtT 2021-09-15 15:48:56 +08:00
只有序号有用,名字叫啥只是跟你生成的代码有关,和传输的数据无关。
|
2
Jokerrrrrr 2021-09-15 15:50:32 +08:00
还有这样对接的嘛
|
3
MegrezZhu 2021-09-15 15:56:14 +08:00
大概可以用 Reflection 或者 Descriptor 强行搞?
但为啥只给 pb 说明呢…… |
4
virusdefender 2021-09-15 16:06:14 +08:00
去要啊,可能就是忘了给了
|
5
securityCoding 2021-09-15 16:15:59 +08:00
通用的 ,v2/v3 试一下就可以
|
6
lslvxy OP @TtTtTtT 我测试了下是只有序号有用的,接口文档给的太粗糙了,太难理解
![]( https://gitee.com/lslvxy/pics/raw/master/imgs/2021-09/20210915163128.png) 这个怎么理解啊 |
7
TtTtTtT 2021-09-15 16:35:25 +08:00
@lslvxy 就是 byte[]再解析成下面那个对象。
因为 protobuf 对于多态的支持有点弱,一般都是先转换成 ByteString,再塞到一个 bytes 的 field 里。 |
8
lslvxy OP @TtTtTtT 那我 httpclient 调用 要先把下面的对象 build 之后 toByteArray()再塞到上面的 bytes 里面再 toByteArray()发出去么
|
9
TtTtTtT 2021-09-15 16:42:18 +08:00
@lslvxy 唔,是的。
不过你如果是调用方的话,不考虑他们的那种多态设计,字段直接引用对象也是可以的。在 Protobuf 内部,bytes 和 message type 的类型是一样的。 |
10
lslvxy OP @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 |
11
TtTtTtT 2021-09-16 10:28:17 +08:00
@lslvxy 不知道返回的是啥,解析了一下前面几个 Byte,到 110 就卡住了。
int 1 对应的是 8,string 2 对应的是 18 。 |
13
sikong31 2021-09-16 17:24:13 +08:00
如果你是想知道其他序号什么类型 可以用这个 https://github.com/mildsunrise/protobuf-inspector 数据够多一般都能搞出来
|