ホームページ >バックエンド開発 >Golang >Go Jin の Struct タグ検証からのエラー メッセージをカスタマイズするにはどうすればよいですか?

Go Jin の Struct タグ検証からのエラー メッセージをカスタマイズするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-06 21:25:15470ブラウズ

How Can I Customize Error Messages from Go Gin's Struct Tag Validation?

Go Gin での構造体タグ検証のエラー メッセージのカスタマイズ

Go の人気のある Web フレームワークである Gin は、 go-playground/validator/ を利用します。構造体の検証には v10。検証が失敗すると、通常、詳細なエラー メッセージが返されます。この記事では、これらのメッセージをカスタマイズして、よりユーザー フレンドリーなエクスペリエンスを提供する方法について説明します。

エラーの種類について理解する

Gin の検証によって返されるエラーは、validator.ValidationErrors 。このエラー タイプには、validator.FieldErrors のコレクションが含まれており、それぞれが無効なフィールドとその検証タグを表します。

エラー メッセージのカスタマイズ

エラー メッセージをカスタマイズするには、次のことができます。 error.As 関数を使用して、validator.ValidationErrors をエラーに変換します。変換後は、個々の validator.FieldErrors にアクセスし、使用された検証タグに基づいてカスタム エラー メッセージを構築できます。

カスタム エラー モデルの作成

まず、定義します。カスタム エラー モデル (例:

type ApiError struct {
    Field string
    Msg   string
}

のエラー メッセージのカスタマイズ)検証タグ

次に、検証タグをカスタム エラー メッセージにマップするヘルパー関数を定義します。

func msgForTag(tag string) string {
    switch tag {
    case "required":
        return "This field is required"
    case "email":
        return "Invalid email"
    }
    return ""
}

検証エラーのバインドと処理

ハンドラー関数で、リクエストを構造体にバインドし、検証をチェックできます。エラー:

var u User
err := c.BindQuery(&u)
if err != nil {
    var ve validator.ValidationErrors
    if errors.As(err, &ve) {
        out := make([]ApiError, len(ve))
        for i, fe := range ve {
            out[i] = ApiError{fe.Field(), msgForTag(fe.Tag())}
        }
        c.JSON(http.StatusBadRequest, gin.H{"errors": out})
    }
    return
}

出力例

このカスタム エラー処理を使用すると、次の形式の JSON 応答を返すことができます:

{
    "errors": [
        {
            "Field": "Number",
            "Msg": "This field is required"
        }
    ]
}

これにより、よりユーザーフレンドリーで有益なエラー応答がユーザーに提供されます。

以上がGo Jin の Struct タグ検証からのエラー メッセージをカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。