- add utils.TryUnmarshalUseNumber

- remove utils.HTTPResponse2Json
This commit is contained in:
gazebo
2019-02-27 14:19:23 +08:00
parent 6d6eee7b09
commit ff06369a23
2 changed files with 19 additions and 22 deletions

View File

@@ -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)
}

View File

@@ -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 {