我正在尝试使用此功能发送POST请求-
{

  func (Client *Client) doModify(method string, url string, createObj interface{}, respObject interface{}) error {

    bodyContent, err := json.Marshal(createObj)
    if err != nil {
        return err
    }

    client := Client.newHttpClient()

    req, err := http.NewRequest(method, url, bytes.NewBuffer(bodyContent))
    if err != nil {
        return err
    }

    Client.setupRequest(req)
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("Content-Length", string(len(bodyContent)))

    resp, err := client.Do(req)

    if err != nil {
        return err
    }

    defer resp.Body.Close()

    if resp.StatusCode >= 300 {
        return errors.New(fmt.Sprintf("Bad response from [%s], go [%d]", url, resp.StatusCode))
    }

    byteContent, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return err
    }

    return json.Unmarshal(byteContent, respObject)
}

}

我正在这样调用我的函数-

{
    func TestContainerCreate(t *testing.T) {
    client := newClient(t)
    container, err := client.Container.Create(&Container{
        Name:      "name",
        ImageUuid: "xyz",
    })

    if err != nil {
        t.Fatal(err)
    }

    defer client.Container.Delete(container)

}

}

Create函数内部调用doCreate函数,该函数调用粘贴在顶部的doModify函数。
{
func (self *ContainerClient) Create(container *Container) (*Container, error) {
    resp := &Container{}
    err := self.Client.doCreate(container_TYPE, container, resp)
    return resp, err
}

}

{
   func (Client *Client) doCreate(schemaType string, createObj interface{}, respObject interface{}) error {
        if createObj == nil {
            createObj = map[string]string{}
        }

        schema, ok := Client.Types[schemaType]
        if !ok {
            return errors.New("Unknown schema type [" + schemaType + "]")
        }

        return Client.doModify("POST", collectionUrl, createObj, respObject)
    }

}

这给了我422错误的响应。在进行进一步的研究时,执行CURL时,将“name”和“imageUuid”的首字母作为小写,给出201的创建状态,但将“Name”和“ImageUuid”的首字母作为资本给出了422个不良 react 。为容器定义的json结构是否可能出现问题,或者是否定义了这些实体或其他情况?
{
curl -X POST -v -s http://localhost:8080/v1/containers -H 'Content-Type: application/json' -d '{"name" : "demo", "imageUuid" : "docker:nginx"}'   | python -m 'json.tool'

}

容器结构定义看起来像这样-
{
type Container struct {
    Resource

    ImageId string `json:"ImageId,omitempty"`

    ImageUuid string `json:"ImageUuid,omitempty"`

    MemoryMb int `json:"MemoryMb,omitempty"`

    Name string `json:"Name,omitempty"`

}

type ContainerCollection struct {
    Collection
    Data []Container `json:"data,omitempty"`
}

}

最佳答案

string(len(bodyContent))没有按照您的想法做。您正在将单个int转换为utf-8字符串。您想使用strconv包来获取数字表示形式。

另请注意,由于omitempty是有效值,因此您不能0一个int。

08-19 16:24