【发布时间】:2017-10-10 06:10:55
【问题描述】:
我已经使用 golang 和 ravel 创建了一个 API 服务器。在其中一种 POST 方法中,我需要在保存之前读取正文并将其解码为模型。但它没有这样做。这是我使用的指南https://medium.com/@kyawmyintthein/revel-mgo-restful-generator-for-revel-web-framework-mongodb-86209de3977e
预期的行为是在 mongoDB 中创建用户对象。但我收到错误响应。将其解码为用户结构时出现问题。
控制器方法:
func (c UserController) Create() revel.Result {
fmt.Print("Body: ")
fmt.Println(c.Request.Body)
var (
user models.User
err error
)
err = json.NewDecoder(c.Request.Body).Decode(&user)
if err != nil {
errResp := buildErrResponse(err, "403")
c.Response.Status = 403
return c.RenderJSON(errResp)
}
user, err = models.AddUser(user)
if err != nil {
errResp := buildErrResponse(err, "500")
c.Response.Status = 500
return c.RenderJSON(errResp)
}
c.Response.Status = 201
return c.RenderJSON(user)
}
用户模型:
package models
import (
"gopkg.in/mgo.v2/bson"
"time"
"userAPI/app/models/mongodb"
)
type User struct {
ID bson.ObjectId `json:"id" bson:"_id"`
Name string `json:"name" bson:"name"`
Email string `json:"email" bson:"email"`
Phone string `json:"phone" bson:"phone"`
Username string `json:"username" bson:"username"`
CreatedAt time.Time `json:"created_at" bson:"created_at"`
UpdatedAt time.Time `json:"updated_at" bson:"updated_at"`
}
POST 请求中使用的 JSON 正文
{
"name":"kanishka",
"email":"kanishka@gmail.com",
"phone":"91238901238",
"username":"k"
}
这是我收到的回复
{
"error_code": "403",
"error_message": "EOF"
}
控制器方法顶部println(c.Request.Body)的输出显示
&{0xc4202ffa80 假真{0 0}真假假 0x12a1430}
这是我第一次尝试 golang。请帮助我进一步进行。
【问题讨论】:
-
请提供一个minimal 代码示例,并说明您的预期输出。你得到的输出是 Go 打印结构的标准方式,在本例中是 Body。
-
确保您没有尝试读取请求正文两次。这行不通。
-
@Peter 我不是。我清除了该方法并尝试了 Cerise Limón 在下面的答案中建议的方法。仍然没有运气:/
-
您的客户端正在发送不完整的数据(甚至可能什么都没有)。
-
@Peter 请在此处找到请求的屏幕截图:ibb.co/jdwsFb