この記事では、Go で HTTP リクエスト ハンドラーを設計する方法を検討します。 Jin フレームワークを使用して、multipart/form-data リクエストの一部として送信される 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 ... }
「数値リテラルに無効な文字 '-'」のようなエラーが発生した場合は、次の原因が考えられます。リクエスト本文に multipart/form-data の境界も含まれているときに、JSON を解析しようとしています。代わりに、 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-data で JSON と一緒に XML または YAML が期待される場合
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 中国語 Web サイトの他の関連記事を参照してください。