美文网首页
golang使用http post json调用服务

golang使用http post json调用服务

作者: EasyNetCN | 来源:发表于2020-08-12 16:25 被阅读0次

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
}

相关文章

网友评论

      本文标题:golang使用http post json调用服务

      本文链接:https://www.haomeiwen.com/subject/kdkmdktx.html