为了账号安全,请及时绑定邮箱和手机立即绑定

go struct JSON decode 总是空的 return &{}

go struct JSON decode 总是空的 return &{}

Go
隔江千里 2021-12-07 15:15:43
我的处理程序可能做错了什么?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在解码器中使用。


查看完整回答
反对 回复 2021-12-07
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

您必须删除r.ParseForm. 你可以在这里阅读

https://golang.org/pkg/net/http/#Request.ParseForm

对于 POST 或 PUT 请求,它还解析请求正文

因此,您的请求正文在调用后将为空ParseForm,您将收到一个空结构。


查看完整回答
反对 回复 2021-12-07
  • 2 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信