如何格式化google.protobuf.Any为JSON?解决Envoy转码报错问题
解决Envoy转码google.protobuf.Any字段的报错问题
错误原因
报错metadata: invalid value Invalid type URL, unknown type: metadata for type Any的核心问题是**@type字段的类型URL不完整**。google.protobuf.Any要求类型URL必须包含完整的protobuf全限定类型名(包名+消息名),你当前使用的type.googleapis.com/metadata仅指定了消息名,缺少对应的包名,导致Envoy无法识别该类型。
正确的JSON请求格式
根据你提供的proto定义,Metadata消息的全限定类型名为package.Metadata(包名package + 消息名Metadata),因此需要修正@type字段的值:
{ "type": "create", "metadata": { "@type": "type.googleapis.com/package.Metadata", "credentials": { "username": "username", "password": "password" }, "context": { "key": "value" } } }
额外注意事项
- 确保Envoy的转码配置已正确加载所有相关proto文件(
credentials.proto、metadata.proto、service.proto),Envoy需要这些类型定义才能完成Any字段的解析与转码。 - 类型URL对大小写敏感,必须与proto文件中定义的包名、消息名完全一致。
内容的提问来源于stack exchange,提问作者Gunwoo Kim
相关产品推荐
相关产品推荐

