From ab40c3dfb33f52c6c54181ffd72f39ca93fd7413 Mon Sep 17 00:00:00 2001 From: hechenglong Date: Wed, 16 Apr 2025 19:32:49 +0800 Subject: [PATCH] fix: Fixed functions of decodeJson do not return. --- response.go | 2 +- stream_test.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 stream_test.go diff --git a/response.go b/response.go index 6b619e05..5862adf4 100644 --- a/response.go +++ b/response.go @@ -265,7 +265,7 @@ func (r *Response) wrapCopyReadCloser() { f: func(b *bytes.Buffer) { r.bodyBytes = append([]byte{}, b.Bytes()...) closeq(r.Body) - r.Body = &nopReadCloser{r: bytes.NewReader(r.bodyBytes)} + r.Body = io.NopCloser(bytes.NewReader(r.bodyBytes)) releaseBuffer(b) }, } diff --git a/stream_test.go b/stream_test.go new file mode 100644 index 00000000..8da42b31 --- /dev/null +++ b/stream_test.go @@ -0,0 +1,44 @@ +package resty + +import ( + "bytes" + "io" + "net/http" + "net/http/httptest" + "testing" +) + +func TestDecodeJSONWhenResponseBodyIsNull(t *testing.T) { + r := &Response{ + Body: io.NopCloser(bytes.NewReader([]byte("null"))), + } + r.wrapCopyReadCloser() + err := r.readAll() + assertNil(t, err) + + var result map[int]int + err = decodeJSON(r.Body, &result) + assertNil(t, err) + assertNil(t, result) +} + +func TestGetMethodWhenResponseIsNull(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Write([]byte("null")) + })) + + client := New().SetRetryCount(3).EnableGenerateCurlCmd() + + var x any + resp, err := client.R().SetBody("{}"). + SetHeader("Content-Type", "application/json; charset=utf-8"). + SetForceResponseContentType("application/json"). + SetAllowMethodGetPayload(true). + SetResponseBodyUnlimitedReads(true). + SetResult(&x). + Get(server.URL + "/test") + + assertNil(t, err) + assertEqual(t, "null", resp.String()) + assertEqual(t, nil, x) +}