Json Golang net/http请求正文始终为空
我正在尝试将JSON参数发送到我的服务器,并使用JSON.Decoder解析它们。我已经读到,您应该能够从request.Body属性获取查询参数。以下是我的服务器代码:Json Golang net/http请求正文始终为空,json,web,go,Json,Web,Go,我正在尝试将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 {
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)
}
每次我都会看到2014/12/26 22:49:23
(当然是不同的时间戳)。我的客户端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);
}
});
发送内容的示例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
更好地查看参数:
{
steps: "1",
direction: "1",
cells: "[{"row":11,"column":15},{"row":12,"column":15}]"
}
我尝试了GET和POST请求
为什么我的请求体从未解码?如果我试图单独打印请求正文,我也会看到nil。请求的
正文
在有效负载内发送-它不是URL的一部分
你正试图接近尸体。。当您的数据确实在URL中时
您希望它将ajax
方法:“get”
更改为方法:“post”
——以便数据与正文一起发布,而不是作为URL的一部分发布。您还应确保数据确实与请求一起通过您选择的浏览器“开发人员工具”发送。或者,如果您确实希望将数据作为URL的一部分发送,您应该访问请求的URL
参数,并手动将值解析为一个结构(json包不会为您IIRC执行此操作)。req.Body
确实是空的——因此,我将其称为req.ParseForm()
然后改为使用req.Form
Body
不会获取请求正文中肯定没有的内容(例如查询参数)。在我看来,req.Body
确实是空的——那么为什么不调用req.ParseForm()
然后使用req.Form
?是什么给您的印象是,Body
会以某种方式获取请求正文中肯定不存在的内容(查询参数)?我似乎对req.Body引用的内容有误解。req.Form给了我一个映射-有没有办法自动将查询字符串解组成一个对象?@AlexMartelli,我同意你的解决方案。如果你创造一个答案,我可以把它标记为这个问题的解决方案。非常感谢你!完成@LarryPrice——不客气!Json不会这样做,但是req.ParseForm()
(然后访问req.Form
)应该代表您进行解析,不是吗?是的-我的观点是将其映射到结构将是一个手动过程-与Json包的解码
方法相反。我尝试将我的方法更改为POST,我验证了数据是作为有效载荷在体内发送的,但每次我尝试解码时仍然得到零。然而,现在我的身体看起来像&{0xc208020620 false{0 0}false}
。你能告诉我们你试图解码的模型和你有什么错误吗?