json - 在golang go Fiber框架中将rest api POST请求从json转换为form-data

标签 json rest go form-data go-fiber

我有以下代码,适用于 POST 请求正文中的 JSON,但我现在想将其转换为在正文中使用 form-data请求

这是我所拥有的

func Signin(c *fiber.Ctx) error {
    var data map[string]string

    if err := c.BodyParser(&data); err != nil {
        return err
    }

    var user models.User

    findUser := database.DB.Where("email = ?", data.email).First(&user)

    token, err := middlewares.GenerateJWT(user.Email)

    if err != nil {
        c.Status(fiber.StatusBadRequest)
        return c.JSON(fiber.Map{
            "message": "Invalid credentials",
        })  
    }

    cookie := fiber.Cookie{
        Name: "access_token",
        Value: token,
        Expires: time.Now().Add(time.Hour * 24),
        HTTPOnly: true,
        Secure:   true,
    }

    c.Cookie(&cookie)

    return c.JSON(fiber.Map{
        "access_token": token,
        "token_type": "bearer",
    })

}

上面的内容适用于原始 JSON 主体,但我想更改为 form-data 主体

我尝试了很多方法,包括这个,但没有成功

func Signin(c *fiber.Ctx) error {

    type SigninData struct {
        email  string `json:"email" xml:"email" form:"email"`
        password string `json:"password" xml:"password" form:"password"`
    }

    data := new(SigninData)

    if err := c.BodyParser(&data); err != nil {
        return err
    }

    var user models.User

    findUser := database.DB.Where("email = ?", data.email).First(&user)

    token, err := middlewares.GenerateJWT(user.Email)

    if err != nil {
        c.Status(fiber.StatusBadRequest)
        return c.JSON(fiber.Map{
            "message": "Invalid credentials",
        })  
    }


    cookie := fiber.Cookie{
        Name: "access_token",
        Value: token,
        Expires: time.Now().Add(time.Hour * 24),
        HTTPOnly: true,
        Secure:   true,
    }

    c.Cookie(&cookie)

    return c.JSON(fiber.Map{
        "access_token": token,
        "token_type": "bearer",
    })

}

但我收到以下错误

schema: interface must be a pointer to struct

我需要修复什么才能让它接受表单数据?

最佳答案

方法 BodyParser 需要一个指向结构的指针作为参数,但您的代码试图向它传递一个指向结构的指针。请以这种方式初始化结构:

data := SigninData{}

此外,尝试将 SigninData 结构的字段设为公共(public):

type SigninData struct {
    Email  string `json:"email" xml:"email" form:"email"`
    Password string `json:"password" xml:"password" form:"password"`
}

关于json - 在golang go Fiber框架中将rest api POST请求从json转换为form-data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70538796/

相关文章:

xml - REST 风格的 API : How to model JSON representation?

javascript - d3 森伯斯特硬编码数据

javascript - 如何从json中获取输入来绘制图形

java - 如何创建 Restful 服务并将其部署到 OSGi 容器中?

java - 没有类型转换器可用于从类型 : <<pojo>> to the required type: java. io.InputStream 转换为值

php - MySQL查询插入成功但返回false

ios - 来自 ios 应用程序的 AWS Elasticsearch

go - Golang Consumer连接Kafka后延迟接收Kafka消息

Golang 阴影行为解释

go - 创建/获取自定义 kubernetes 资源