Как передать json в качестве полезной нагрузки в .proto

В соответствии со следующей страницей я должен иметь возможность отправлять полезные данные json: https://developers.google.com/protocol-buffers/docs/proto3 в разделе "Сопоставление JSON".

Я хотел бы отправить полезную нагрузку json как часть сообщения, и у меня есть следующий файл .proto:

message EventsRequest{
    message RequestElement {
        struct payload = 1;
    }
    string customerId = 1;
    repeated RequestElement jsonPayload = 2;
}


message EventsResponse {
    int32 status = 1;
    string rawResponseData = 2;
    struct responseData = 3;
}

Но его компиляция дает мне следующую ошибку:

[INFO] Compiling 1 proto file(s) to C:\workspace\...\target\generated-sources\protobuf\java
[ERROR] PROTOC FAILED: msg_service.proto:21:9: "struct" is not defined.
msg_service.proto:34:5: "struct" is not defined.

[ERROR] C:\workspace\...\src\main\proto\msg_service.proto [0:0]: msg_service.proto:21:9: "struct" is not defined.
msg_service.proto:34:5: "struct" is not defined.

Я тоже пробовал Struct, но получил ту же ошибку.

Я неправильно понимаю использование? Если мне нужно отправить полезную нагрузку json, передать ли я строку?

Спасибо


person user1860447    schedule 15.12.2016    source источник


Ответы (4)


В конце концов я использовал String для представления полезной нагрузки json.

person user1860447    schedule 05.01.2017
comment
Это ответ, если честно. - person Dudo; 12.05.2020

Если вы хотите использовать Struct, вам необходимо сначала импортировать:

import "google/protobuf/struct.proto";

Затем во время объявления вместо просто слова Struct используйте google.protobuf.Struct

person dchau    schedule 09.07.2018

Так должно быть,

syntax = "proto3";

package db;
import "google/protobuf/struct.proto";

service Proxy
{
    rpc appConfig(UserId) returns (AppConfig);
}

message UserId
{
    string userId= 1;
}

message AppConfig
{
    Struct appConfig = 1;
}


person Aravin    schedule 26.08.2019

Это должно быть Struct с заглавной буквы S.

person Eric Anderson    schedule 15.12.2016
comment
Это первое, что я попробовал, и у меня возникла та же ошибка, поэтому я попробовал с помощью 'struct' - person user1860447; 15.12.2016
comment
Думаю, вам также понадобится: import "google/protobuf/struct.proto"; - person Eric Anderson; 17.12.2016
comment
Я также попробовал импорт, но это тоже не сработало. - person user1860447; 06.01.2017