无法从发布请求中解析JSON

时间:2018-09-30 09:17:39

标签: json go post echo-framework

我构建了一个具有两个路由的echo微服务api:post和get。

get方法可以正常工作,但是get方法无法解析JSON,这意味着在Bind()函数之后该结构为空。

这一定是我所缺少的非常愚蠢而微小的东西……有什么帮助吗?

// main.go
//--------------------------------------------------------------------
func main() {
    e := echo.New()

    e.GET("/getmethod", func(c echo.Context) error { return c.JSON(200, "good")})
    e.POST("/login", handlers.HandleLogin)

    e.Start("localhost:8000")

}


// handlers/login.go
//--------------------------------------------------------------------
type credentials struct {
    email string `json:"email"`
    pass string `json:"pass"`
}

//--------------------------------------------------------------------
func HandleLogin(c echo.Context) error {
    var creds credentials
    err := c.Bind(&creds)

    if err != nil {
        return c.JSON(http.StatusBadRequest, err) // 400
    }

    return c.JSON(http.StatusOK, creds.email) // 200
}

在使用邮递员运行邮递请求时(以确保:邮递方法,URL为正确的路由,在正文中,在raw> JSON格式下,我按预期发送JSON)我收到200 ok的返回状态,但是空的json,而我希望收到电子邮件属性。

您知道为什么Bind()无法正确提取字段吗?

1 个答案:

答案 0 :(得分:3)

您应该通过大写每个首字母来导出凭据结构的字段,否则json包不知道您拥有哪些字段:

type credentials struct {
    Email string `json:"email"`
    Pass string `json:"pass"`
}

有关更多信息:JSON and dealing with unexported fields