golang使用http post json调用服务
2020-08-12 本文已影响0人
EasyNetCN
golang中http.Client是可以共享的
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"model"
)
type StandardManufacturerService interface {
Search(searchParam model.StandardManufacturerSearchParam) (model.PageResult, error)
}
func NewStandardManufacturerService(client *http.Client, serviceUrl string) StandardManufacturerService {
return &standardManufacturerService{
client: client,
serviceUrl: fmt.Sprintf("%s%s", serviceUrl, "/"),
}
}
type standardManufacturerService struct {
client *http.Client
serviceUrl string
}
func (s *standardManufacturerService) Search(searchParam model.StandardManufacturerSearchParam) (model.PageResult, error) {
pageResult := new(model.PageResult)
requestParam := make(map[string]interface{}, 3)
requestParam["searchContent"] = searchParam.Keyword
requestParam["page"] = searchParam.PageIndex
requestParam["limit"] = searchParam.PageSize
jsonBytes, err := json.Marshal(requestParam)
if err != nil {
return *pageResult, err
}
req, err := http.NewRequest("POST", s.serviceUrl, bytes.NewReader(jsonBytes))
if err != nil {
return *pageResult, err
}
req.Header.Set("Content-Type", "application/json;charset=UTF-8")
res, err := s.client.Do(req)
if err != nil {
return *pageResult, err
}
resBytes, err := ioutil.ReadAll(res.Body)
if err != nil {
return *pageResult, err
}
apiResult := new(model.ApiManufacturerResult)
err = json.Unmarshal(resBytes, apiResult)
if err != nil {
return *pageResult, err
}
pageResult.Total = apiResult.Data.TotalElements
pageResult.TotalPages = apiResult.Data.TotalPages
pageResult.Data = make([]interface{}, len(apiResult.Data.Content))
for i, item := range apiResult.Data.Content {
m := &model.StandardManufacturer{
Id: item.Id,
Code: item.CerNo,
Name: item.EnterName,
}
pageResult.Data[i] = m
}
return *pageResult, nil
}