【发布时间】:2021-11-22 06:54:17
【问题描述】:
我正在开发一个 Java GRPC 服务,它接受 JSON 输入并返回一个 JSON 结构作为响应对象。我可以返回一个类对象而不是在响应中将其转换为 JSON 吗?
我可以用 Java 解析客户端收到的返回对象吗?如果有,怎么做?
如果服务返回多个不同的响应对象(类),那么我应该如何配置 proto 来处理这些对象。例如汽车、自行车等?
【问题讨论】:
我正在开发一个 Java GRPC 服务,它接受 JSON 输入并返回一个 JSON 结构作为响应对象。我可以返回一个类对象而不是在响应中将其转换为 JSON 吗?
我可以用 Java 解析客户端收到的返回对象吗?如果有,怎么做?
如果服务返回多个不同的响应对象(类),那么我应该如何配置 proto 来处理这些对象。例如汽车、自行车等?
【问题讨论】:
gRPC 默认使用 Protobufs 进行服务和消息定义。这种默认机制的一个优点是您可以使用 Protobufs 定义服务和消息,protoc 将为两者生成客户端和服务器语言特定的绑定。
任何消息格式(例如 JSON)都可以与 gRPC 一起使用,但它不太常见,而且对开发人员来说更辛苦
您的 gRPC 客户端的存根是否接受并返回 JSON?
或者您是否使用规范的JSON encoding 来促进 JSON 消息的输入/输出?
如果您不熟悉它,请参阅 Java gRPC intro。
我问,因为使用此默认流程,在客户端和服务器上都为您提供特定于语言的类型(类|结构等)。
Protobufs 不支持泛型类型。例如,您可以使用 Oneof如果您有已知的类型列表,则为 Dog 或 Cat。当类型列表未知或无限且类似于java.lang.Object时,您可以使用Any封装消息(信封)
最后一点,即使protoc 会在配置为这样做时生成 Java 类,但建议将此类生成的类包装|映射到您自己的应用程序类型中。这部分是为了不要与它们过于紧密地绑定,但也因为有一些您可能不希望出现的特定于 protobuf 的功能。
因此,无论您使用哪种底层消息格式,您都可能会映射到各种对象类型编组
【讨论】: