更新Proto消息后gRPC服务include_obsolete字段反序列化异常
gRPC请求中新增bool字段始终为false的排查与解决
核心问题:JSON字段名与Protobuf命名规则不匹配
Protobuf默认的JSON映射规则会将Proto中的下划线命名(snake_case)转换为驼峰命名(camelCase)。你的Proto字段是include_obsolete,但Postman请求中使用了下划线格式的"include_obsolete": true,这会导致服务端无法正确解析该字段,从而使用bool类型的默认值false。
解决步骤
修正Postman请求的字段名
将请求中的字段改为驼峰格式:{ "includeObsolete": true, "header": { "comment": { "actionType": "action", "comment": "elit sit esse", "createdBy": "in dolore enim", "createdDate": "3410", "ID": 45 }, "messageType": "officia est", "senderAddress": "aute sed irure anim labore", "senderId": "mollit sunt", "token": "dolore dolor", "user": "erwin" } }强制刷新代码生成与构建
即使执行了cargo clean,仍需确保gRPC代码完全重新生成:- 手动删除项目中生成的gRPC代码目录(通常是
src/proto或类似路径下的自动生成文件) - 重新运行构建命令:
cargo build,确保build.rs中的tonic-build(或其他gRPC代码生成工具)重新解析Proto文件并生成最新代码
- 手动删除项目中生成的gRPC代码目录(通常是
验证Postman的请求模式
- 如果使用gRPC JSON模式,确保请求的
Content-Type设置为application/grpc+json - 如果使用二进制Protobuf模式,需在Postman的gRPC界面中重新加载更新后的Proto文件,确保新增字段被识别并正确赋值
- 如果使用gRPC JSON模式,确保请求的
额外验证点
- 在服务端打印原始请求数据:可以临时添加代码打印请求的原始字节或JSON字符串,确认目标字段是否确实被发送到服务端
- 检查Proto文件的编译日志:确认新增字段
include_obsolete = 2在编译过程中没有被忽略或报错
内容的提问来源于stack exchange,提问作者Abenstex
相关产品推荐
相关产品推荐

