[英]Proto deserialization from json will fail on new fields or unknown enum values
proto
的设计宗旨是使引入新字段不会破坏您在旧版本上运行的代码。
但是,如果您使用protobuf-java-util
在java
使用json
转换,那么您的旧代码将在现有代码未知的新字段或新枚举值上中断...
我在github
上打开了一个问题 ,但是没有引起任何注意。 我希望在这里得到一些答案。
给定这样的消息
message Msg {
required string sender = 1;
required string message = 2;
}
如果我们将其转换为json并使用
JsonFormat.printer().print(msg)
我们将得到这个结果
{
"sender": "me",
"message": "message"
}
如果我们使用其生成器将此json解码为Msg
JsonFormat.parser().merge(json, builder)
我们将获得预期的结果...但是,如果我们尝试使用其他extra
字段来解码相似的json
{
"sender": "me",
"message": "message",
"extra" : "some extra stuff"
}
我们将因这个例外而失败
com.google.protobuf.InvalidProtocolBufferException: Cannot find field: extra in message proto.Msg
没有人关心这个问题怎么办? 到目前为止,我对此的唯一解决方案是从头开始编写解析器,该解析器将在解析时忽略未知字段和未知枚举值。
有什么我忽略的东西吗?或者人们根本不使用向后兼容功能?
该问题已由Google修复,构建器提供了忽略未知字段的选项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.