requestparser.go 947 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package gateway
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "net/http"
  6. "github.com/fullstorydev/grpcurl"
  7. "github.com/golang/protobuf/jsonpb"
  8. "github.com/zeromicro/go-zero/rest/pathvar"
  9. )
  10. func buildJsonRequestParser(v interface{}, resolver jsonpb.AnyResolver) (grpcurl.RequestParser, error) {
  11. var buf bytes.Buffer
  12. if err := json.NewEncoder(&buf).Encode(v); err != nil {
  13. return nil, err
  14. }
  15. return grpcurl.NewJSONRequestParser(&buf, resolver), nil
  16. }
  17. func newRequestParser(r *http.Request, resolver jsonpb.AnyResolver) (grpcurl.RequestParser, error) {
  18. vars := pathvar.Vars(r)
  19. if len(vars) == 0 {
  20. return grpcurl.NewJSONRequestParser(r.Body, resolver), nil
  21. }
  22. if r.ContentLength == 0 {
  23. return buildJsonRequestParser(vars, resolver)
  24. }
  25. m := make(map[string]interface{})
  26. if err := json.NewDecoder(r.Body).Decode(&m); err != nil {
  27. return nil, err
  28. }
  29. for k, v := range vars {
  30. m[k] = v
  31. }
  32. return buildJsonRequestParser(m, resolver)
  33. }