在 Go 中生成没有 OmitEmpty JSON 标签的 Proto Buff
当使用带有 JSON 代理的 gRPC 时,omitempty 标签会自动添加到生成的结构中。这可能会在编组消息时导致问题,因为默认值不包含在 JSON 负载中。
要解决此问题,请考虑将以下选项添加到您的 ServeMux:
gwmux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))
这将确保默认值始终存在于生成的 JSON 中。
或者,您可以使用google.golang.org/protobuf/encoding/protojson 包来编组您的协议缓冲区消息。该包提供了对编码过程的更多控制,并允许您指定应发出的默认值:
func sendProtoMessage(resp proto.Message, w http.ResponseWriter) { w.Header().Set("Content-Type", "application/json; charset=utf-8") m := protojson.Marshaler{EmitDefaults: true} m.Marshal(w, resp) // Check for errors here }
注意: google.golang.org/protobuf 已替换已弃用的 github .com/golang/protobuf 及其 jsonpb 包。
以上是在 Go 中生成 Protobuf 消息时如何防止 OmitEmpty JSON 标签?的详细内容。更多信息请关注PHP中文网其他相关文章!