【问题标题】:How to create java pojo from the existing protobuf file?如何从现有的 protobuf 文件创建 java pojo?
【发布时间】:2016-04-28 07:19:00
【问题描述】:

我正在尝试将 .proto(2.5 版)转换为 java pojo。例如

来自

message Article {
    optional string title = 1;
}

public class Article {
    private string title;

    public string getTitle() {
        return title;
    }

    public void setTitle(string title) {
        this.title = title;
    }
}

但是官方的protoc不支持生成pojo方式的java文件。

有没有工具可以自动从 .proto 文件生成 pojo?

【问题讨论】:

  • 当你尝试的时候发生了什么?
  • .proto 文件太多,我需要一个工具。

标签: java pojo protocol-buffers


【解决方案1】:

看看:https://github.com/sagroskin/protoc-gen-pojo

这是使用原始文件的“描述符”

  • 我不保留 cmets 或文档。
  • 没有 getter 或 setter。
  • 每个 .proto 文件一个输出 .java 文件

不过,只要稍加工作,它就可以解决您的用例。

example.proto

syntax = "proto3";

message Article {
    string title = 1;
}

enum yesno {
  no = 0;
  yes = 1;
}
git clone https://github.com/sagroskin/protoc-gen-pojo.git
cd protoc-gen-pojo
go build
# Run protobuf/bin/protoc with this plugin
protoc --plugin=./protoc-gen-pojo --proto_path=./ --pojo_out=./ example.proto

它会创建example.java

// Code generated by protoc-gen-pojo.

public enum yesno {
    no (0),
    yes (1),
}

public class Article {
    public String title;
}

【讨论】:

    【解决方案2】:

    此 SO 线程包含用于生成协议缓冲区的 Java“纳米”变体的文档,这可能正是您正在寻找的:Android protobuf nano documentation

    否则,您自己生成代码的最简单方法可能是使用 google 开源协议缓冲区代码生成器为您的协议缓冲区生成“descriptors”,然后迭代描述符(并且可能使用诸如作为 Java 诗人)来生成 Java 代码。

    【讨论】:

    • Java “nano” 生成文件的变体也不是 pojo 风格。但是解析描述符可能是唯一的方法。
    • 对于您的示例,生成的 nano 代码应该几乎匹配...有什么区别使它不适合您的情况?
    • 就我而言,有一些proto文件来描述数据结构,但我不想编译java依赖protobuf,因为真正的数据格式是json。但是谢谢老兄,我写了一个粗略的脚本来通过描述符生成pojo,它可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 2012-12-13
    • 2011-10-30
    • 1970-01-01
    相关资源
    最近更新 更多