Génération de proto buffs sans balises JSON OmitEmpty dans Go
Lors de l'utilisation de gRPC avec un proxy JSON, les balises omitempty sont automatiquement ajoutées aux structures générées. Cela peut entraîner des problèmes lors du marshaling des messages, car les valeurs par défaut ne sont pas incluses dans la charge utile JSON.
Pour surmonter ce problème, pensez à ajouter l'option suivante à votre ServeMux :
gwmux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))
Cela garantira que les valeurs par défaut sont toujours présentes dans le JSON généré.
Alternativement, vous pouvez utiliser le Package google.golang.org/protobuf/encoding/protojson pour rassembler les messages de votre tampon de protocole. Ce package offre plus de contrôle sur le processus d'encodage et vous permet de spécifier que les valeurs par défaut doivent être émises :
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 }
Remarque : google.golang.org/protobuf a remplacé le github obsolète .com/golang/protobuf et son package jsonpb.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!