来自 Java List<List<Object>> 的 Protobuf 消息
Protobuff message from Java List<List<Object>>
我一直在尝试将 Java List> 打包到一个 protobuf3 消息中,我只是想知道定义一个可以打包这样一个 List 的 proto 文件的最佳方法是什么以及如何映射它有效,因为我一直在尝试但无法让它发挥作用。
我的初步想法:
// Proto file
message TutorialAPIResponse {
repeated google.protobuf.Any values = 1;
}
//Packaging
List<List<Object>> apiValues = Api.getWhatever();
AnalyzeSignalsResponse response = AnalyzeSignalsResponse.newBuilder()
// line below gives compile error "error: incompatible types: List<List<Object>> cannot be converted to Iterable<? extends Any>"
.addAllValues(values)
.build();
你不能真正在 protobuf 中表达一个双重嵌套的列表;您需要表达一个列表,其中的内容本身 有 个列表;所以.. List<Foo>
对于某些具有 List<Object>
的 Foo
,或者用 protobuf 术语来说:
message TutorialAPIResponse {
repeated Foo items = 1;
}
message Foo {
repeated google.protobuf.Any values = 1;
}
此外,我个人会避免使用 Any
。如果你不说 Any
就不能表达你要返回的内容,IMO 这不是一个好的 API 表面。
我一直在尝试将 Java List> 打包到一个 protobuf3 消息中,我只是想知道定义一个可以打包这样一个 List 的 proto 文件的最佳方法是什么以及如何映射它有效,因为我一直在尝试但无法让它发挥作用。
我的初步想法:
// Proto file
message TutorialAPIResponse {
repeated google.protobuf.Any values = 1;
}
//Packaging
List<List<Object>> apiValues = Api.getWhatever();
AnalyzeSignalsResponse response = AnalyzeSignalsResponse.newBuilder()
// line below gives compile error "error: incompatible types: List<List<Object>> cannot be converted to Iterable<? extends Any>"
.addAllValues(values)
.build();
你不能真正在 protobuf 中表达一个双重嵌套的列表;您需要表达一个列表,其中的内容本身 有 个列表;所以.. List<Foo>
对于某些具有 List<Object>
的 Foo
,或者用 protobuf 术语来说:
message TutorialAPIResponse {
repeated Foo items = 1;
}
message Foo {
repeated google.protobuf.Any values = 1;
}
此外,我个人会避免使用 Any
。如果你不说 Any
就不能表达你要返回的内容,IMO 这不是一个好的 API 表面。