为了账号安全,请及时绑定邮箱和手机立即绑定

如何解压 golang 中的 grpc status.details 错误?

如何解压 golang 中的 grpc status.details 错误?

Go
海绵宝宝撒 2022-06-27 16:04:32
我想为我的 REST API 使用 google.golang.org/grpc/status 错误模型,因为它说您可以:该Status类型定义了适用于不同编程环境的逻辑错误模型,包括 REST API 和 RPC API。但是我遇到details了结构部分的问题。我知道它是 type []*anypb.Any,但是,我不清楚如何将它变成“解包”形式,因此我可以看到 Field 和 Description 属性,而不是 base64 编码的value字段。我得到了什么:{    "code": 3,    "message": "One or more fields are invalid",    "details": [        {            "type_url": "type.googleapis.com/google.rpc.BadRequest.FieldViolation",            "value": "CgVFbWFpbBIUSW52YWxpZCBlbWFpbCBmb3JtYXQ="        },        {            "type_url": "type.googleapis.com/google.rpc.BadRequest.FieldViolation",            "value": "CghQYXNzd29yZBIeTXVzdCBiZSBhdCBsZWFzdCAxMCBjaGFyYWN0ZXJz"        }    ]}我应该得到什么:{    "code": 3,    "message": "One or more fields are invalid",    "details": [        {            "type_url": "type.googleapis.com/google.rpc.BadRequest.FieldViolation",            "field": "Email",            "description": "Invalid email format"        },        {            "type_url": "type.googleapis.com/google.rpc.BadRequest.FieldViolation",            "field": "Password",            "description": "Must be at least 10 characters"        }    ]}
查看完整描述

1 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

编码器json不是 100% 兼容 protobuf。

使用protojson.Marshalfrom"google.golang.org/protobuf/encoding/protojson"代替。

看到这个游乐场

虽然它没有那么快。

编辑要回答更快的替代方案的请求:

可以使用包含所有必需数据的自定义错误结构并手动解开 grpc 状态及其详细信息。看到这个游乐场。在我的机器上,这节省了大约 15% 的时间。


查看完整回答
反对 回复 2022-06-27
  • 1 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信