我的处理程序可能做错了什么?type Patient struct { FirstName string LastName string}func createHandler(w http.ResponseWriter, r *http.Request) { r.ParseForm() p := new(Patient) err := json.NewDecoder(r.Body).Decode(&p) if err != nil && err != io.EOF { log.Fatal(err) } log.Print(p)}我总是从 curl -X POST $PATH -d '{"firstName": "Julian"}'2016/01/23 17:33:50 &{ }编辑我已经添加fmt.Println(r)并得到了这个2016/01/23 18:33:22 &{POST /patients/ HTTP/1.1 1 1 map[Accept:[*/*] Content-Type:[application/json] User-Agent:[curl/7.46.0]] 0x9b2820 0 [] false localhost:8081 map[] map[] <nil> map[] [::1]:35394 /patients/ <nil> <nil>}调试上一行后,我意识到这是大猩猩工具包的子路由器的问题
2 回答
温温酱
TA贡献1752条经验 获得超4个赞
两件事情:
由于您使用的是 JSON lib 约定,因此您的帖子表单数据应该是FirstName
而不是firstName
. 如果您真的想使用firstName
,则需要将此结构标记添加到字段:json:"firstName"
。
接下来,您不需要再放入&
,&p
因为new(Patient)
已经返回了一个指针。就放p
。
虽然就个人而言,我只是这样做p := Patient{}
,所以我知道它不是一个指针,也不是&p
在解码器中使用。
拉莫斯之舞
TA贡献1820条经验 获得超10个赞
您必须删除r.ParseForm
. 你可以在这里阅读
https://golang.org/pkg/net/http/#Request.ParseForm
对于 POST 或 PUT 请求,它还解析请求正文
因此,您的请求正文在调用后将为空ParseForm
,您将收到一个空结构。
- 2 回答
- 0 关注
- 148 浏览
添加回答
举报
0/150
提交
取消