GORM GIN 更新查询导致 500 内部服务器错误

我正在使用 Gin 和 GORM 在 Golang 中构建 Book API。我已成功实施 API 的创建、获取和删除部分,但更新导致 500 内部服务器错误。我正在尝试更新功能,它只更新正文中提供的特定标签(下面给出的示例)。非常感谢任何帮助或指导。

去模型


func UpdateBook(c *gin.Context) {

    // Get model if exist

    var book models.Book

    if err := models.DB.Where("id = ?", c.Param("id")).First(&book).Error; err != nil {

        c.JSON(http.StatusBadRequest, gin.H{"error": "Record not found!"})

        return

    }


    // Validate input

    var input UpdateBookInput

    if err := c.ShouldBindJSON(&input); err != nil {

        c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})

        return

    }


    models.DB.Model(&book).Updates(input)


    c.JSON(http.StatusOK, gin.H{"data": book})

}

UpdateBookInput 结构


type UpdateBookInput struct {

    Title  string `json:"title"`

    Author string `json:"author"`

}

主程序


func main() {


    router := gin.Default()


    models.ConnectDatabase()


    router.GET("/books", controllers.FetchBooks)

    router.GET("/books/:id", controllers.FindBookByID)

    router.GET("/books/title/:title", controllers.FindBookByTitle)

    router.GET("/books/author/:author", controllers.FindBookByAuthor)


    router.POST("/books", controllers.CreateBook)


    router.PATCH("/books/:id", controllers.UpdateBook)


    router.DELETE("/books/:id", controllers.RemoveBook)


    router.Run()

}

请求 URL 和正文 URL


PATCH http://127.0.0.1:8080/books/2

身体


{

    "title": "Breaking Dawn",

}

方案/型号


package models


type Book struct {

    ID     uint   `json:"id" gorm:"primary_key"`

    Title  string `json:"title"`

    Author string `json:"author"`

}


宝慕林4294392
浏览 232回答 2
2回答

慕码人2483693

我想 JSON 数据包含一个字符串类型的 ID 字段,因为这里唯一的 uint 字段是 ID。要么 gorm 对更新或类似的东西表现得很奇怪。确保输入是干净的。

绝地无双

不要直接传递 UpdateBookInput 对象,而是将其转换为models.Book对象。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go