Golang net / http请求正文始终为空

Lar*_*ice 5 json go web

我正在尝试将JSON参数发送到我的服务器,并使用json.Decoder解析它们。我已经读到您应该能够从request.Body属性获取查询参数。以下是我的服务器代码:

func stepHandler(res http.ResponseWriter, req *http.Request) {
    var v interface{}
    err := json.NewDecoder(req.Body).Decode(&v)
    if err != nil {
       // handle error
    }
    log.Println(v)
}
Run Code Online (Sandbox Code Playgroud)

每次,我都会看到2014/12/26 22:49:23 <nil>(当然是不同的时间戳记)。我的客户端AJAX调用如下:

$.ajax({
  url: "/step",
  method: "get",
  data: {
    steps: $("#step-size").val(),
    direction: $("#step-forward").prop("checked") ? 1 : -1,
    cells: JSON.stringify(painted)
  },
  success: function (data) {
    painted = data;
    redraw();
  },
  error: function (xhr) {
    console.log(xhr);
  }
});
Run Code Online (Sandbox Code Playgroud)

发送内容的示例URL:

http://localhost:5000/?steps=1&direction=1&cells=%5B%7B%22row%22%3A11%2C%22column%22%3A15%7D%2C%7B%22row%22%3A12%2C%22column%22%3A15%7D%5D
Run Code Online (Sandbox Code Playgroud)

更好看一下参数:

{
  steps: "1",
  direction: "1",
  cells: "[{"row":11,"column":15},{"row":12,"column":15}]"
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了GET和POST请求。

为什么我的req.Body从不解码?如果我尝试单独打印req.Body,也会看到nil。

Ale*_*lli 4

req.Body确实是空的——所以,我会调用它req.ParseForm(),然后使用req.Form它。Body不会获得绝对不在请求正文中的内容(例如查询参数)。