我构建了一个具有两个路由的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()无法正确提取字段吗?
答案 0 :(得分:3)
您应该通过大写每个首字母来导出凭据结构的字段,否则json包不知道您拥有哪些字段:
type credentials struct {
Email string `json:"email"`
Pass string `json:"pass"`
}