Rest req.FormValue未映射req.body值

Rest req.FormValue未映射req.body值,rest,go,post,Rest,Go,Post,我试图在request.body中选择一个值,但一直得到一个空字符串。 表单映射也显示为空。 我做错了什么 package user import ( "fmt" "net/http" "../../types" ) func PostTest(w http.ResponseWriter, r *http.Request) { r.ParseForm() x := r.FormValue("name") fmt.Println(x) }

我试图在request.body中选择一个值,但一直得到一个空字符串。 表单映射也显示为空。 我做错了什么

package user

import (
    "fmt"
    "net/http"

    "../../types"
)

func PostTest(w http.ResponseWriter, r *http.Request) {

    r.ParseForm()

    x := r.FormValue("name")
    fmt.Println(x)
}
邮政请求正文:

{
    "name":"Tom",
    "age":25
}

原因是请求主体不是有效的表单数据,而是JSON数据的blob。您需要先对其进行解析,然后才能提取名称,例如:

type data struct {
    Name string
    Age  int
}

func PostTest(w http.ResponseWriter, r *http.Request) {
    var d data
    json.NewDecoder(r.Body).Decode(&d) // Error handling omitted.
    fmt.Println(d.Name)
}

这里有一个例子来证明这一点。为了简洁起见,我省略了错误处理。

PostTest是如何调用的?
ParseForm
将解析url编码的表单。您正在发送json。您必须阅读请求正文并自行解组。