|
@@ -1,6 +1,7 @@
|
|
package request
|
|
package request
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
+ "bytes"
|
|
"context"
|
|
"context"
|
|
"encoding/json"
|
|
"encoding/json"
|
|
"encoding/xml"
|
|
"encoding/xml"
|
|
@@ -63,16 +64,15 @@ func (r *Request) detectContentType(body interface{}) string {
|
|
return contentType
|
|
return contentType
|
|
}
|
|
}
|
|
|
|
|
|
-func (r *Request) readRequestBody(contentType string, body any) (buf []byte, err error) {
|
|
|
|
|
|
+func (r *Request) readRequestBody(contentType string, body any) (reader io.Reader, err error) {
|
|
var (
|
|
var (
|
|
- ok bool
|
|
|
|
- s string
|
|
|
|
- reader io.Reader
|
|
|
|
|
|
+ ok bool
|
|
|
|
+ s string
|
|
|
|
+ buf []byte
|
|
)
|
|
)
|
|
kind := reflect.Indirect(reflect.ValueOf(body)).Type().Kind()
|
|
kind := reflect.Indirect(reflect.ValueOf(body)).Type().Kind()
|
|
if reader, ok = r.body.(io.Reader); ok {
|
|
if reader, ok = r.body.(io.Reader); ok {
|
|
- buf, err = io.ReadAll(reader)
|
|
|
|
- goto __end
|
|
|
|
|
|
+ return reader, nil
|
|
}
|
|
}
|
|
if buf, ok = r.body.([]byte); ok {
|
|
if buf, ok = r.body.([]byte); ok {
|
|
goto __end
|
|
goto __end
|
|
@@ -91,6 +91,11 @@ func (r *Request) readRequestBody(contentType string, body any) (buf []byte, err
|
|
}
|
|
}
|
|
err = fmt.Errorf("unmarshal content type %s", contentType)
|
|
err = fmt.Errorf("unmarshal content type %s", contentType)
|
|
__end:
|
|
__end:
|
|
|
|
+ if err == nil {
|
|
|
|
+ if len(buf) > 0 {
|
|
|
|
+ return bytes.NewReader(buf), nil
|
|
|
|
+ }
|
|
|
|
+ }
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
|