java - 如何用 protobuf 表示未命名的对象列表?
问题描述
我正在尝试使用 Spring RestTemplate 使用 REST api,这几乎是我想要做的:
public ResponseEntity<OfficeProto.Offices> getAllOffices() {
return restTemplate.exchange(uri, HttpMethod.GET, httpEntity, new ParameterizedTypeReference<OfficeProto.Offices>() {});
}
以下是源 json 的样子,我如何在 protobuf 中表示一个未命名的列表?
[
{
"name": "Office 1"
},
{
"name": "Office 2"
}
]
这就是我的.proto
文件的样子
syntax = "proto3";
option java_outer_classname = "OfficeProto";
message Office {
string name = 1;
}
message Offices {
repeated Office office = 1;
}
我收到以下错误:
org.springframework.web.client.RestClientException: Error while extracting response for type [class com.findwise.connect.OfficeProto$Offices] and content type [application/json]; nested exception is com.googlecode.protobuf.format.JsonFormat$ParseException: 1:1: Expected "{".
解决方案
看起来您正在尝试使用 protobuf 使用通用JSON API。然而,protobuf不是一个通用的 JSON 序列化器——它对 JSON 的支持是非常固执的,它的观点并不适合你的场景。
所以:在这种情况下不要尝试使用 protobuf。使用更通用的 JSON 工具。
作为使生活更轻松的一般指导,您应该只使用由 protobuf编写的 protobuf 作为解析器(并且您恰好需要一个文本 API,而不是 protobuf 喜欢的二进制 API)。这样,您就知道意见至少会匹配。
推荐阅读
- discord.js - 否则代码无法正常工作 discord.js
- python - 将列表转换为数据框时如何使用“换行”命令?
- azure - AzureML RunDetails 小部件输出
- javascript - 清除带有消息内容的命令
- node.js - 使用 NodeJs 将 CSV 文件中的记录插入 Oracle
- windows - bash:emacs:找不到命令(在 Windows 10 上)
- regex - URL 编码文本与 htaccess QUERY_STRING 不匹配
- java - 如何从另一个活动(按钮)JAVA更新recyclerview
- promise - Promise 调用在 Angular 11 中被调用两次
- c++ - 是否有 C++ 习语通过模板魔术将所谓的速率组(实时计算)编码为函数?