繁体   English   中英

JSON的原始反序列化将在新字段或未知枚举值上失败

[英]Proto deserialization from json will fail on new fields or unknown enum values

proto的设计宗旨是使引入新字段不会破坏您在旧版本上运行的代码。

但是,如果您使用protobuf-java-utiljava使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM