在GO中发送POST请求时,从服务器获得错误响应 - 422

时间:2014-12-02 18:50:36

标签: json go httpresponse

我正在尝试使用此功能发送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个不良回应。是否存在为容器定义的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"`
}

}

1 个答案:

答案 0 :(得分:3)

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

另请注意,您不能omitempty为int,因为0是有效值。