0

我构建了一个 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 是正确的路线,在正文> 原始> JSON 格式下,我按预期发送 JSON )我收到返回状态 200 ok,但 json 为空,而我希望收到电子邮件属性。

知道为什么 Bind() 没有正确提取字段吗?

4

1 回答 1

4

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

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

有关更多信息:JSON 和处理未导出的字段

于 2018-09-30T09:31:06.437 回答