spring - 如何使用 envoy-proxy 在 Grpc 中以 json 格式发送错误响应
问题描述
我正在使用 resonseObserver.onError() 从 grpc 服务抛出错误,但是在从 REST 客户端访问 REST API 时,我没有收到 json 格式的消息,尽管积极的情况工作正常并以 json 形式给出响应。
我正在使用特使作为转码器,任何人都可以帮助我如何获得错误响应也作为 json。目前,我在错误情况下收到 BadRequest。该项目在 SpringBoot 中。
TIA
解决方案
您可以使用convert_grpc_status : true 来执行此操作。
http_filters:
- name: envoy.filters.http.grpc_json_transcoder
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.grpc_json_transcoder.v3.GrpcJsonTranscoder
proto_descriptor: "/tmp/envoy/proto.pb"
services: ["xxxxxxxx"]
convert_grpc_status: true
print_options:
always_print_primitive_fields: true
always_print_enums_as_ints: false
preserve_proto_field_names: false
如果您的意思是这样的返回详细信息键:
{
"code": 3,
"message": "API call quota depleted",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ResourceInfo",
"resourceType": "xxxxxx",
"resourceName": "",
"owner": "",
"description": ""
}
]
}
你必须编译你的 .proto 文件:
import "google/rpc/error_details.proto";
因为 Envoy 无法在没有错误类型的情况下从后端服务器反序列化二进制详细信息。
您还可以阅读如何使用 Python 发送详细的错误响应:How to send error details like as BadRequest
推荐阅读
- android - 在 Flutter 中的 Column 小部件中驻留的 Row 小部件中以 Flexible 包装的 TextField 居中
- c# - Asp.net C# 有没有更好的方法来根据记录数动态分配值?
- python - 如何在 python 中使用 OOP 从文本文件创建排行榜?
- java - 微调器上 findViewById 的 Android NullPointerException
- javascript - 跨节点边界时如何用多个元素包装getSelection()
- java - JavaFX 剪贴板和 lostOwnership
- javascript - 有没有办法在 VS Code 中使用未知/任何类型(仅假定存在)标记标识符来制作 JS 编辑器?
- mongodb - 如何在 Apache NiFi 中访问 MongoDB 文档中的字段
- html - 悬停时不出现下拉菜单
- javascript - 正则表达式删除某些字符前后的引号