-
Notifications
You must be signed in to change notification settings - Fork 0
/
jsonvalidation.go
71 lines (58 loc) · 2.03 KB
/
jsonvalidation.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package main
import (
"fmt"
"log"
"github.com/go-playground/locales/en"
ut "github.com/go-playground/universal-translator"
"gopkg.in/go-playground/validator.v9"
en_translations "gopkg.in/go-playground/validator.v9/translations/en"
)
type User struct {
Email string `json:"email" validate:"required,email"`
Name string `json:"name" validate:"required"`
Password string `json:"password" validate:"passwd"`
}
func main() {
translator := en.New()
uni := ut.New(translator, translator)
// this is usually known or extracted from http 'Accept-Language' header
// also see uni.FindTranslator(...)
trans, found := uni.GetTranslator("en")
if !found {
log.Fatal("translator not found")
}
v := validator.New()
if err := en_translations.RegisterDefaultTranslations(v, trans); err != nil {
log.Fatal(err)
}
_ = v.RegisterTranslation("required", trans, func(ut ut.Translator) error {
return ut.Add("required", "{0} is a required field", true) // see universal-translator for details
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("required", fe.Field())
return t
})
_ = v.RegisterTranslation("email", trans, func(ut ut.Translator) error {
return ut.Add("email", "{0} must be a valid email", true) // see universal-translator for details
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("email", fe.Field())
return t
})
_ = v.RegisterTranslation("passwd", trans, func(ut ut.Translator) error {
return ut.Add("passwd", "{0} is not strong enough", true) // see universal-translator for details
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("passwd", fe.Field())
return t
})
_ = v.RegisterValidation("passwd", func(fl validator.FieldLevel) bool {
return len(fl.Field().String()) > 6
})
a := User{
Email: "a",
Name: "aarsh",
Password: "1234567",
}
err := v.Struct(a)
for _, e := range err.(validator.ValidationErrors) {
fmt.Println(e.Translate(trans))
}
}