Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyesuaikan Mesej Ralat daripada Pengesahan Tag Struct Gin?

Bagaimana untuk Menyesuaikan Mesej Ralat daripada Pengesahan Tag Struct Gin?

Susan Sarandon
Susan Sarandonasal
2024-12-15 05:42:10517semak imbas

How to Customize Error Messages from Gin's Struct Tag Validation?

Menyesuaikan Mesej Ralat daripada Pengesahan Tag Struktur

Dalam Gin, pengesahan teg struct digunakan untuk memastikan integriti data sebelum pemasukan pangkalan data. Ralat lalai yang dikembalikan adalah verbose dan tidak bermaklumat untuk pengguna. Artikel ini menerangkan cara untuk menyesuaikan mesej ralat untuk memberikan respons yang lebih bermakna.

Gin menggunakan pakej go-playground/validator/v10 untuk pengesahan. Ralat dikembalikan sebagai validator.ValidationErrors. Untuk menyesuaikan mesej, gunakan pakej ralat standard untuk membuka balut ralat dan akses validator. Medan FieldError.

Buat model ralat (cth., ApiError) untuk menentukan struktur mesej ralat tersuai anda. Contohnya:

type ApiError struct {
    Field string
    Msg   string
}

Dalam pengendali anda, kendalikan ralat seperti berikut:

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
}

Akhir sekali, tentukan fungsi pembantu untuk memetakan teg pengesahan kepada mesej tersuai:

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

Menggunakan pendekatan ini, mesej ralat akan disesuaikan dengan nama medan dan mesej yang disesuaikan berdasarkan pengesahan tag.

Atas ialah kandungan terperinci Bagaimana untuk Menyesuaikan Mesej Ralat daripada Pengesahan Tag Struct Gin?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn