123456789101112131415161718192021222324252627282930313233343536373839404142 |
- package gateway
- import (
- "bytes"
- "encoding/json"
- "net/http"
- "github.com/fullstorydev/grpcurl"
- "github.com/golang/protobuf/jsonpb"
- "github.com/zeromicro/go-zero/rest/pathvar"
- )
- func buildJsonRequestParser(v interface{}, resolver jsonpb.AnyResolver) (grpcurl.RequestParser, error) {
- var buf bytes.Buffer
- if err := json.NewEncoder(&buf).Encode(v); err != nil {
- return nil, err
- }
- return grpcurl.NewJSONRequestParser(&buf, resolver), nil
- }
- func newRequestParser(r *http.Request, resolver jsonpb.AnyResolver) (grpcurl.RequestParser, error) {
- vars := pathvar.Vars(r)
- if len(vars) == 0 {
- return grpcurl.NewJSONRequestParser(r.Body, resolver), nil
- }
- if r.ContentLength == 0 {
- return buildJsonRequestParser(vars, resolver)
- }
- m := make(map[string]interface{})
- if err := json.NewDecoder(r.Body).Decode(&m); err != nil {
- return nil, err
- }
- for k, v := range vars {
- m[k] = v
- }
- return buildJsonRequestParser(m, resolver)
- }
|