参数验证器
validator
由于go-zero的参数校验规则比较少,所以ark-admin修改了handler模板,加入了go-playground/validator
详细校验规则请参考官方文档,这里就不再赘述了
使用校验
以更新个人资料为例,生成的handler如下
package user
import (
"errors"
"net/http"
"reflect"
"ark-admin-zero/app/core/cmd/api/internal/logic/user"
"ark-admin-zero/app/core/cmd/api/internal/svc"
"ark-admin-zero/app/core/cmd/api/internal/types"
"ark-admin-zero/common/errorx"
"ark-admin-zero/common/response"
"github.com/go-playground/locales/zh"
ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator/v10"
translations "github.com/go-playground/validator/v10/translations/zh"
"github.com/zeromicro/go-zero/rest/httpx"
)
func UpdateUserProfileHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.UpdateProfileReq
if err := httpx.Parse(r, &req); err != nil {
httpx.Error(w, errorx.NewHandlerError(errorx.ParamErrorCode, err.Error()))
return
}
validate := validator.New()
validate.RegisterTagNameFunc(func(fld reflect.StructField) string {
name := fld.Tag.Get("label")
return name
})
trans, _ := ut.New(zh.New()).GetTranslator("zh")
validateErr := translations.RegisterDefaultTranslations(validate, trans)
if validateErr = validate.StructCtx(r.Context(), req); validateErr != nil {
for _, err := range validateErr.(validator.ValidationErrors) {
httpx.Error(w, errorx.NewHandlerError(errorx.ParamErrorCode, errors.New(err.Translate(trans)).Error()))
return
}
}
l := user.NewUpdateUserProfileLogic(r.Context(), svcCtx)
err := l.UpdateUserProfile(&req)
if err != nil {
httpx.Error(w, err)
return
}
response.Response(w, nil, err)
}
}