1

我正在尝试使用 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 "{".
4

1 回答 1

1

看起来您正在尝试使用 protobuf 使用通用JSON API。然而,protobuf不是一个通用的 JSON 序列化器——它对 JSON 的支持是非常固执的,它的观点并不适合你的场景。

所以:在这种情况下不要尝试使用 protobuf。使用更通用的 JSON 工具。

作为使生活更轻松的一般指导,您应该只使用由 protobuf编写的 protobuf 作为解析器(并且您恰好需要一个文本 API,而不是 protobuf 喜欢的二进制 API)。这样,您就知道意见至少会匹配。

于 2019-04-02T13:13:25.867 回答