如何从现有的protobuf文件创建Java POJO?

4
我正在尝试将.proto(版本2.5)转换为Java pojo。例如:

message Article {
    optional string title = 1;
}

to

public class Article {
    private string title;

    public string getTitle() {
        return title;
    }

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

但是官方协议不支持通过Java文件生成POJO的方式。
有没有任何工具可以自动从.proto文件生成POJO?

你尝试过了吗? - f1sh
太多的.proto文件,我需要一个工具。 - light13
2个回答

3
请看:https://github.com/sagroskin/protoc-gen-pojo 此工具使用proto文件中的“描述符”。
  • 不会保留注释或文档。
  • 没有getter或setter。
  • 每个.proto文件产生一个输出.java文件。
然而,经过一些努力,它可以解决你的用例。
示例.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;
}

1
这个 SO 帖子包含生成 Java "nano" 版本的协议缓冲区的文档,这可能正是你要找的:Android protobuf nano documentation 否则,自己生成代码最简单的方法可能是使用 Google 开源协议缓冲区代码生成器为您的协议缓冲区生成 "描述符",然后迭代描述符(也许使用像 java poet 这样的库)来生成 Java 代码。

Java“nano”生成文件的风格不是普通的POJO风格,不过解析描述符可能是唯一的方法。 - light13
对于您的示例,生成的纳米代码应该几乎匹配... 有什么区别使其不适合您的情况? - Stefan Haustein
在我的情况下,有一些proto文件来描述数据结构,但我不想依赖protobuf编译Java,因为真正的数据格式是JSON。但是感谢你,我写了一个粗略的脚本通过描述符生成POJO,它有效地工作了。 - light13

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接