#protocol-buffers #protobuf-java #proto3 #grpcurl
Вопрос:
Как отправить сообщение типа «Любой» с помощью grpcurl?
У меня есть этот прото:
message MyRequest {
string request_id = 1;
repeated google.protobuf.Any payload = 2;
}
Я отправляю этот запрос:
{
"request_id":"1",
"payload":[
{
"@type":"type.googleapis.com/com.my.type.Payload",
"id":"12345",
"message": "Hello",
}
]
}
grpcurl -открытый текст-d ‘{«request_id»: «1», «полезная нагрузка»: [{«@тип»: «type.googleapis.com/com.my.type.Полезная нагрузка», «идентификатор»: «12345», «сообщение»: «Привет»}]}’ локальный хост:1000 com.my.service.Имя службы/Метод
но я получаю ошибку: Error invoking method "com.my.service.ServiceName/Method": error getting request data: unknown message type "com.my.type.Payload"
Сервер является проектом Spring Boot в Котлине, поэтому я добавил компонент
@Bean
fun protobufJsonFormatHttpMessageConverter(): ProtobufHttpMessageConverter? {
val typeRegistry: JsonFormat.TypeRegistry = JsonFormat.TypeRegistry.newBuilder()
.add(com.my.type.Payload.getDescriptor())
.build()
val printer = JsonFormat.printer().usingTypeRegistry(typeRegistry)
return ProtobufJsonFormatHttpMessageConverter(JsonFormat.parser(), printer)
}
Но это не помогло. Как это исправить?
Комментарии:
1. Я подозреваю-но не знаю, — что вам нужно кодировать
payload
как[]byte
, а не рассматривать как инкапсулированное сообщение. К сожалению, я не знаю, как бы вы его закодировали, но, возможно, вам сойдет с рук base64.2. Возможно, стоит отправить вопрос в
gRPCurl
репо и спросить там: github.com/fullstorydev/grpcurl/issues3. Спасибо, нашел там ту же проблему: github.com/fullstorydev/grpcurl/issues/193
4. Пожалуйста. Я пытался найти там проблемы для вас и не нашел ни одной!