diff --git a/httpclient/define/request.go b/httpclient/define/request.go index 4fbdb3f..3361c15 100644 --- a/httpclient/define/request.go +++ b/httpclient/define/request.go @@ -30,6 +30,7 @@ type Request struct { Method string `json:"method"` // 请求方法 DataField string `json:"data_field"` // 数据字段 CodeField string `json:"code_field"` // 业务状态码字段 + CodeLocation string `json:"code_location"` // 业务状态码位置 MessageField string `json:"message_field"` // code描述字段 DataReceiver any `json:"-"` // 响应data部分数据解析 SuccessHttpCodeList []int `json:"success_http_code_list"` // 哪些http状态码视为成功, 不配置, 默认2xx diff --git a/httpclient/implement/response.go b/httpclient/implement/response.go index 1c8e26f..94e1b82 100644 --- a/httpclient/implement/response.go +++ b/httpclient/implement/response.go @@ -94,8 +94,20 @@ func (r *Response) fillResponseBody(reqCfg *define.Request, response *define.Res return errors.New("response body Marshal error :" + err.Error()) } response.Data = string(jsonByte) - response.Code = gjson.Get(response.Data, reqCfg.CodeField).String() - response.Message = gjson.Get(response.Data, reqCfg.MessageField).String() + if strings.ToLower(reqCfg.CodeLocation) == "header" { + if reqCfg.CodeField == "code" { + response.Code = fmt.Sprintf("%v", response.HttpCode) + response.Message = response.RestyResponse.Status() + } else { + response.Code = response.RestyResponse.Header().Get(reqCfg.CodeField) + response.Message = response.RestyResponse.Header().Get(reqCfg.MessageField) + } + } else { + // 统一认为Body + response.Code = gjson.Get(response.Data, reqCfg.CodeField).String() + response.Message = gjson.Get(response.Data, reqCfg.MessageField).String() + } + businessData := gjson.Get(response.Data, reqCfg.DataField) if businessData.Value() == nil { // data为空指针, 归一化成空对象