提交最新的gateway 支持通用的response map返回

This commit is contained in:
eson
2023-11-16 17:45:04 +08:00
parent f7efb6faf3
commit 889b25edef
5 changed files with 29 additions and 13 deletions

View File

@@ -21,10 +21,5 @@ func AutoRegisterHandler(ctx context.Context, mux *runtime.ServeMux, opts ...grp
return err
}
err = service.RegisterInfoHandlerClientNacos(ctx, mux, opts...)
if err != nil {
return err
}
return nil
}

View File

@@ -5,6 +5,7 @@ import (
"context"
"fmt"
"fusen-basic/basic"
"fusen-gateway/gen/go/service"
"net/http"
"regexp"
@@ -21,7 +22,16 @@ func (m *EmptyMarshaler) Marshal(v interface{}) ([]byte, error) {
return nil, nil
}
var fsProtoJSON = &runtime.JSONPb{
var fsDefaultProtoJSON = &runtime.JSONPb{
MarshalOptions: protojson.MarshalOptions{
EmitUnpopulated: true,
},
UnmarshalOptions: protojson.UnmarshalOptions{
DiscardUnknown: true,
},
}
var fsProtoDataJSON = &runtime.JSONPb{
MarshalOptions: protojson.MarshalOptions{
EmitUnpopulated: true,
},
@@ -35,10 +45,21 @@ var codeRE = regexp.MustCompile(`(?i)"code"\s*:\s*(\d+)`)
func WriteFusenResponse(fsHeader string, w http.ResponseWriter, resp proto.Message) error {
w.WriteHeader(200)
var buf = bytes.NewBufferString(fsHeader[:len(fsHeader)-1] + ",")
rdata, err := fsProtoJSON.Marshal(resp)
if err != nil {
return err
var rdata []byte
var err error
if customResp, ok := resp.(*service.Response); ok {
rdata, err = protojson.Marshal(customResp.GetData())
if err != nil {
return err
}
} else {
rdata, err = protojson.Marshal(resp)
if err != nil {
return err
}
}
buf.WriteString(`"data":`)
buf.Write(rdata)
buf.WriteString(`}`)