type ValidationModel struct { Name string `json:"name" valid:"alpha,required~Name is required"` Email string `json:"email" valid:"email~Enter a valid email.,required~Email is required."` Password string `json:"password" valid:"required~Password is required"`}validationModel := ValidationModel{}json.NewDecoder(r.Body).Decode(&validationModel)_, err := govalidator.ValidateStruct(validationModel)首先,我使用 govalidator 验证请求正文。type UserModel struct { ID bson.ObjectId `json:"_id" bson:"_id"` Name string `json:"name" bson:"name"` Email string `json:"email" bson:"email"` Password string `json:"password,omitempty" bson:"-"` PasswordHash string `json:"-" bson:"passwordHash"` Salt string `json:"-" bson:"salt"` Token string `json:"token,omitempty" bson:"-"`}user := models.UserModel{}json.NewDecoder(r.Body).Decode(&user)fmt.Println(user)在验证请求之后,我再次将请求主体解码为用户结构,但请求主体已使用 validationModel 读取一次,因此当我再次尝试将其解码为用户时,它没有给我任何值。我可以在这里想到两种解决方案:将请求主体存储在一个单独的变量中,并使用该变量两次。复制用户中的 validationModel 值。但是我对实施这些方法以及最好遵循哪种方法一无所知。或者有没有其他可以实施的解决方案?提前致谢。
1 回答
缥缈止盈
TA贡献2041条经验 获得超4个赞
使用ioutil.ReadAll()可以轻松地存储数据:
data, err := ioutil.ReadAll(r.Body)
如果您需要将data
背面作为 a io.Reader
(就是这样r.Body
),那么您可以使用bytes.NewReader():
reader := bytes.NewReader(data)
实际上,r.Body
是一个io.ReadCloser
,因此如果您需要,可以将ioutil.NopCloser()与bytes.NewReader()结合使用:
reader := ioutil.NopCloser(bytes.NewReader(data))
- 1 回答
- 0 关注
- 117 浏览
添加回答
举报
0/150
提交
取消