【问题标题】:How can I pass an object as a service response object using GRPC?如何使用 GRPC 将对象作为服务响应对象传递?
【发布时间】:2021-11-22 06:54:17
【问题描述】:

我正在开发一个 Java GRPC 服务,它接受 JSON 输入并返回一个 JSON 结构作为响应对象。我可以返回一个类对象而不是在响应中将其转换为 JSON 吗?

我可以用 Java 解析客户端收到的返回对象吗?如果有,怎么做?

如果服务返回多个不同的响应对象(类),那么我应该如何配置 proto 来处理这些对象。例如汽车、自行车等?

【问题讨论】:

    标签: java json grpc grpc-java


    【解决方案1】:

    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 的功能。

    因此,无论您使用哪种底层消息格式,您都可能会映射到各种对象类型编组

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 2018-06-11
      • 1970-01-01
      • 2015-02-13
      • 2012-06-09
      • 1970-01-01
      相关资源
      最近更新 更多