我正在尝试确保发布请求的正文例如包含正文的确切结构,如果不应该抛出错误
例如我有以下功能
func UpdatePassword(c *fiber.Ctx) error {
type UpdatePasswordData struct {
Password string `json:"password" form:"password"`
NewPassword string `json:"new_password" form:"new_password"`
NewPasswordConfirm string `json:"new_password_confirm" form:"new_password_confirm"`
}
data := UpdatePasswordData{}
if err := c.BodyParser(&data); err != nil {
return err
}
var user models.User
if data.NewPassword != data.NewPasswordConfirm {
c.Status(400)
return c.JSON(fiber.Map{
"message": "passwords do not match",
})
}
email, _ := middlewares.GetUserEmail(c)
newPassword := models.HashPassword(data.NewPassword)
database.DB.Model(&user).Select("Password").Where("email = ?", email).Updates(map[string]interface{}{"Password": newPassword})
return c.JSON(user)
}
POST 请求应该寻找具有这种结构的主体
{
"password": "oldpassword",
"new_password": "newpassword",
"new_password_confirm": "newpassword",
}
但目前此端点接受不具有此确切结构的主体。那么如何在请求正文中强制执行结构,以便如果结构不匹配,我会抛出错误?