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

我的处理程序可能做错了什么?


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>}

调试上一行后,我意识到这是大猩猩工具包的子路由器的问题


隔江千里
浏览 149回答 2
2回答

温温酱

两件事情:由于您使用的是 JSON lib 约定,因此您的帖子表单数据应该是FirstName而不是firstName.&nbsp;如果您真的想使用firstName,则需要将此结构标记添加到字段:json:"firstName"。接下来,您不需要再放入&,&p因为new(Patient)已经返回了一个指针。就放p。虽然就个人而言,我只是这样做p := Patient{},所以我知道它不是一个指针,也不是&p在解码器中使用。

拉莫斯之舞

您必须删除r.ParseForm.&nbsp;你可以在这里阅读https://golang.org/pkg/net/http/#Request.ParseForm对于 POST 或 PUT 请求,它还解析请求正文因此,您的请求正文在调用后将为空ParseForm,您将收到一个空结构。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go