ホームページ > バックエンド開発 > Golang > 構造体タグを使用して、Gin 1.17 の検証エラー メッセージをカスタマイズする方法

構造体タグを使用して、Gin 1.17 の検証エラー メッセージをカスタマイズする方法

Patricia Arquette
リリース: 2024-12-07 16:27:18
オリジナル
571 人が閲覧しました

How to Customize Validation Error Messages in Gin 1.17 Using Struct Tags?

構造体タグ検証からのエラー メッセージをカスタマイズする方法

Gin 1.17 では、データベース操作前のデータ検証に構造体タグ検証を使用するのは簡単です。デフォルトのエラー メッセージは詳細ですが、より明確なユーザー フィードバックを提供するようにカスタマイズできます。

問題の概要

Gin は、github.com/go-playground/validator/v10 パッケージを使用しています。検証。検証が失敗すると、validator.ValidationErrors オブジェクトが返されます。この詳細なエラー メッセージには、検証に失敗した各フィールドに関する情報が含まれています。

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

カスタマイズされたエラー メッセージを取得するには、次の手順を実行できます。

  • 標準エラーのラップを解除する
  • ラップされていないものから個々の validator.FieldError オブジェクトにアクセスします。 validator.ValidationErrors.
  • カスタム エラー モデルを構築し、フィールド名とフィールドの検証タグによって決定されるカスタム エラー メッセージを設定します。

実装例

これは、検証エラーを動的フィールドベースのエラーを含む JSON 応答に変換する実装です。構造:

type ApiError struct {
    Field string
    Msg   string
}

func HandleValidationErrors(c *gin.Context, err error) {
    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})
    }
}

func msgForTag(tag string) string {
    switch tag {
    case "required":
        return "This field is required"
    case "email":
        return "Invalid email"
    }
    return ""
}
ログイン後にコピー

使用例

ハンドラー関数で、HandleValidationErrors を使用して検証エラーを処理します:

func UserHandler(c *gin.Context) {
    var u User
    err := c.BindQuery(&u);
    if err != nil {
        HandleValidationErrors(c, err)
        return
    }
    // ...
}
ログイン後にコピー

以上が構造体タグを使用して、Gin 1.17 の検証エラー メッセージをカスタマイズする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート