使用ShouldBind
示例
1 | // 定义一个结构体绑定请求数据 |
得到的错误提示大概时这样子的
1 | { |
该怎么样给api提供一个友好的错误信息呢?
首先,判断
ShouldBind
返回的底层类型是什么1
fmt.Println(reflect.TypeOf(err))
打印的信息是:
validator.ValidationErrors
让我们看看
validator.ValidationErrors
究竟是什么通过查看源码我们可以看到:
1
type ValidationErrors []FieldError
原来它是一个
FieldError
类型的切片;查看
FieldError
类型源码上是这样子说的:
FieldError
包含获取错误信息的所有方法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// FieldError contains all functions to get error details
type FieldError interface {
Tag() string
ActualTag() string
Namespace() string
StructNamespace() string
Field() string
StructField() string
Value() interface{}
Param() string
Kind() reflect.Kind
Type() reflect.Type
Translate(ut ut.Translator) string
}让我打印下
FieldError
看下吧1
fmt.Println(field.Tag(), field.ActualTag(), field.Namespace(), field.StructNamespace(), field.Field(), field.StructField(), field.Value(), field.Param(), field.Kind(), field.Type())
得到的结果是:
1
required required RequestAdminUserLogin.Password RequestAdminUserLogin.Password Password Password "" string string
让我们自定义一个友好的错误信息吧
1 | // 定义一个结构体绑定请求数据 |
返回的结果是:
1 | { |
现在,你可以通过getParamError
自由自在的返回你想要的错误信息了