假设客户端SRPCHttpClient的proto中定义了message、name两个字段,服务端的proto中只定义了name字段,此时客户端调用的时候,服务端会报RPCStatusReqDeserializeError;在我们的场景中,客户端多给一些参数期望是允许的,服务端这些参数可以不管;我看了下源码,在int SRPCMessage::deserialize(ProtobufIDLMessage *pb_msg)方法中原先的代码
if (JsonToBinaryStream(resolver, GetTypeUrl(pb_msg),
&input_stream, &output_stream).ok())
{
ret = pb_msg->ParseFromString(binary_output) ? 0 : -1;
}
修改
util::JsonParseOptions options;
options.ignore_unknown_fields = true;
if (JsonToBinaryStream(resolver, GetTypeUrl(pb_msg),
&input_stream, &output_stream,options).ok())
{
ret = pb_msg->ParseFromString(binary_output) ? 0 : -1;
}
后续是否可以做成可配置,让调用方自己决定是否需要忽略未知的json字段;
假设客户端SRPCHttpClient的proto中定义了message、name两个字段,服务端的proto中只定义了name字段,此时客户端调用的时候,服务端会报RPCStatusReqDeserializeError;在我们的场景中,客户端多给一些参数期望是允许的,服务端这些参数可以不管;我看了下源码,在int SRPCMessage::deserialize(ProtobufIDLMessage *pb_msg)方法中原先的代码
if (JsonToBinaryStream(resolver, GetTypeUrl(pb_msg),
&input_stream, &output_stream).ok())
{
ret = pb_msg->ParseFromString(binary_output) ? 0 : -1;
}
修改
util::JsonParseOptions options;
options.ignore_unknown_fields = true;
if (JsonToBinaryStream(resolver, GetTypeUrl(pb_msg),
&input_stream, &output_stream,options).ok())
{
ret = pb_msg->ParseFromString(binary_output) ? 0 : -1;
}
后续是否可以做成可配置,让调用方自己决定是否需要忽略未知的json字段;