- add utils.TryUnmarshalUseNumber
- remove utils.HTTPResponse2Json
This commit is contained in:
@@ -138,10 +138,19 @@ func AccessPlatformAPIWithRetry(client *http.Client, handleRequest func() *http.
|
||||
}
|
||||
return ErrHTTPCodeIsNot200
|
||||
}
|
||||
var errLevel string
|
||||
bodyMap, err := utils.HTTPResponse2Json(response)
|
||||
var (
|
||||
errLevel string
|
||||
bodyMap map[string]interface{}
|
||||
)
|
||||
bodyData, err := ioutil.ReadAll(response.Body)
|
||||
if err != nil {
|
||||
errLevel = ErrLevelRecoverableErr // 京东到家偶尔会返回HTML,重试
|
||||
baseapi.SugarLogger.Errorf("AccessPlatformAPIWithRetry:%s url:%v, request:%v failed with error:%v", trackID, request.URL, getClonedData(request.URL, savedBuf), err)
|
||||
} else if err = utils.TryUnmarshalUseNumber(bodyData, &bodyMap); err != nil {
|
||||
baseapi.SugarLogger.Errorf("AccessPlatformAPIWithRetry:%s url:%v, request:%v failed with error:%v, bodyData:%s", trackID, request.URL, getClonedData(request.URL, savedBuf), err, string(bodyData))
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
errLevel = ErrLevelRecoverableErr // 读取数据错误,或数据格式错误认为是偶发情况,重试
|
||||
} else {
|
||||
errLevel, err = handleResponse(bodyMap)
|
||||
}
|
||||
|
||||
@@ -4,8 +4,6 @@ import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"reflect"
|
||||
"strconv"
|
||||
@@ -33,15 +31,19 @@ func GetConcretValue(value reflect.Value) reflect.Value {
|
||||
}
|
||||
|
||||
func UnmarshalUseNumber(data []byte, result interface{}) error {
|
||||
d := json.NewDecoder(bytes.NewReader(data))
|
||||
d.UseNumber()
|
||||
err := d.Decode(result)
|
||||
err := TryUnmarshalUseNumber(data, result)
|
||||
if err != nil {
|
||||
baseapi.SugarLogger.Infof("decode data:%v, error:%v", string(data), err)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func TryUnmarshalUseNumber(data []byte, result interface{}) error {
|
||||
d := json.NewDecoder(bytes.NewReader(data))
|
||||
d.UseNumber()
|
||||
return d.Decode(result)
|
||||
}
|
||||
|
||||
// 这个函数将解析json,返回的map中的字段类型与structObj中的完全一样的
|
||||
func Unmarshal2Map(data []byte, structObj interface{}) (resultMap map[string]interface{}, err error) {
|
||||
if err = json.Unmarshal(data, structObj); err == nil {
|
||||
@@ -287,20 +289,6 @@ func IsTimeZero(timeValue time.Time) bool {
|
||||
return timeValue == DefaultTimeValue || timeValue == ZeroTimeValue
|
||||
}
|
||||
|
||||
func HTTPResponse2Json(response *http.Response) (map[string]interface{}, error) {
|
||||
var jsonResult map[string]interface{}
|
||||
bodyData, err := ioutil.ReadAll(response.Body)
|
||||
if err != nil {
|
||||
// baseapi.SugarLogger.Errorf("ioutil.ReadAll error:%v, response:%v", err, response)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err = UnmarshalUseNumber(bodyData, &jsonResult); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return jsonResult, nil
|
||||
}
|
||||
|
||||
func HTTPBody2Values(data []byte, needDecode bool) (url.Values, error) {
|
||||
bodyStr := string(data)
|
||||
if needDecode {
|
||||
|
||||
Reference in New Issue
Block a user