protojson: 使用 "*" 路径进行字段掩码序列化
作者: ericwenn创建于 2022年4月18日更新于 2026年8月10日
我们遵循了 AIP 建议来实现我们的 API。对于更新方法 (https://google.aip.dev/134#request-message),建议支持一个特殊的 * 字段掩码,用于模拟 PUT 操作 (默认值为 PATCH)。在 Go 中,代码如下:
&fieldmaskpb.FieldMask{
Paths: []string{"*"},
},然而,包含此类 * 字段掩码的消息无法使用 protojson 进行序列化,会出现以下错误:
proto: google.protobuf.FieldMask.paths 含有无效路径: "*"令人惊讶的是,使用 proto.Marshal 可以序列化的内容,却无法使用 protojson.Marshal 进行序列化。是否 protojson 对此规范的验证过于严格?
字段名在每个路径中都会转换为小驼峰命名法。 https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#json-encoding-of-field-masks
内容来源: golang/protobuf