【问题标题】:Generate .proto file for complex Java object为复杂的 Java 对象生成 .proto 文件
【发布时间】:2014-04-07 04:09:09
【问题描述】:

我想序列化一个复杂的 Java 对象抛出 Internet。第一次,我使用 Google Gson 序列化课程。 Gson 提供了一种简单的方法来将对象序列化为 JSON 字符串,并通过 toJson 和 fromJson 从 JSON 字符串反序列化为对象。但是,JSON 字符串不是那么紧凑,在序列化 byte[] 数组时会引入很大的开销。

我正在阅读 Google 协议缓冲区。根据教程,用户必须手动为每条消息编写 .proto 文件。似乎 Protocol Buffer 无法识别用户定义的类(Google protocol buffers - user defined java objects as messages fields)。我有两个问题:

  • protocol buffer 是否知道内置的 Java 定义的类,例如 BigDecimal、BigInteger...?
  • 如果我们有一个复杂的类,它递归地将其他用户定义的类作为成员,我们是否需要遍历所有类的定义并将它们声明为它们在 .proto 文件中归档的消息?如果是这样,这对用户来说是非常糟糕的(也许他们使用了一些外部 java 库并且没有该库中定义的类的源代码)

有没有工具可以自动遍历Java类并生成.proto?

【问题讨论】:

  • “去消毒” JSON 输入?不错的一个;)
  • Protocol Buffers 不支持 Big-Integer / Big-Decimal。

标签: java json serialization protocol-buffers


【解决方案1】:

protobuf 中有一个可能的类型列表。 BigDecimal/BigInteger 不是。您可以编写自己的转换步骤。 https://developers.google.com/protocol-buffers/docs/proto

是的,您需要往返于 java 类和原型之间并编写映射。这是一个必要的步骤,不幸的是每个人都必须这样做。我认为没有自动化工具可以做到这一点。也许您可以编写一个并开源它? :)

我想,你问的是从 java 类到 protobuf 消息的完整的一对一映射。通常,这种映射很难以自动化方式完成。此外,Google 故意将 protobuf 限制为一种序列化协议,而不是像 hibernate 和 spring 这样的 ORM。

【讨论】:

  • 大家好,刚刚遇到这个问题。我认为这种类型的项目将是一个了不起的想法。我们可以通过 Entities 和 Service 方法上的注解让它工作——然后生成 .proto 文件,其中包含可以从这些注解中提取的所有类型、消息和 RPC。它非常像 SPQR(GraphQL 除外)——但遵循完全相同的原则,对吧?它采用我们的 Java 注释并生成一个带有查询、类型、突变等的 .graphqls 模式......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 2018-08-01
  • 2020-01-05
相关资源
最近更新 更多