我们在通过反射服务动态调用服务时, 并没有服务对应的描述文件, 这个时候需要将参数从一个格式转换成protobuf的message对象, JSON是一个简单通用的格式. gRPC官方提供了一个用于JSON对象和Protobuf对象互转的工具
首先引用maven依赖:
<dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java-util</artifactId><version>3.12.0</version></dependency>
// protobuf message转json
HelloReply rep = HelloReply.newBuilder().setMessage("haha").build()
String json = JsonFormat.printer().print(rep)
// json转 protobuf message
Descriptors.MethodDescriptor methodDescriptor = ...
DynamicMessage.Builder messageBuilder = DynamicMessage.newBuilder(methodDescriptor.getInputType());
JsonFormat.parser().merge(json, messageBuilder);
Message msg = messageBuilder.build();
// or
HelloReply.Builder builder = HelloReply.newBuilder();
JsonFormat.parser().merge(json, builder);
HelloReply msg = builder.build()
