在本文中,我們將研究如何設計HTTP 請求處理程序使用Gin框架接受JSON 資料和作為多部分/表單資料請求的一部分發送的圖像檔案。
我們先定義請求處理程序,UpdateProfile(),具有定義預期請求正文格式的結構:
type request struct { Username string `json:"username" binding:"required,min=4,max=20"` Description string `json:"description" binding:"required,max=100"` } func (h *Handlers) UpdateProfile() gin.HandlerFunc { return func(c *gin.Context) { // ... } }
要從請求正文中提取JSON 數據,我們使用c.BindJSON(),提供指向請求結構體的指針:
var updateRequest request if err := c.BindJSON(&updateRequest); err != nil { // Handle JSON binding errors ... }
要解析影像文件,我們使用c.FormFile() :
avatar, err := c.FormFile("avatar") if err != nil { // Handle file parsing errors ... }
如果我們遇到類似「數字文字中的無效字元'-'」的錯誤,很可能是由嘗試解析JSON,同時請求正文也包含multipart/form-data 的邊界。我們可以明確指定binding.FormMultipart 模式:
// c.ShouldBind will choose binding.FormMultipart based on the Content-Type header. // We call c.ShouldBindWith to make it explicitly. if err := c.ShouldBindWith(&updateRequest, binding.FormMultipart); err != nil { // Handle binding errors ... }
如果在multipart/form- 中需要XML 或YAML 與JSON 一起使用,資料請求,我們可以手動解析它們,例如:
var event struct { At time.Time `xml:"time" binding:"required"` Player string `xml:"player" binding:"required"` Action string `xml:"action" binding:"required"` } if err := binding.XML.BindBody([]byte(updateRequest.Event), &event); err != nil { // Handle binding errors ... }
透過遵循討論的技術,您可以在單一多部分/表單中有效解析JSON 資料和上傳的圖像-使用Gin 在Go 中進行資料請求。請記住適當處理任何潛在的綁定錯誤。
以上是如何在 Go 中使用 Gin 處理多部分/表單資料請求中的 JSON 和映像資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!