Browse Source

refactor(validator): 调整错误信息返回逻辑

- 移除了字段路径与错误信息的拼接逻辑
- 简化了 Error() 方法的实现
- 保持仅返回错误信息本身

refactor(transport): 重构 HTTP 请求解码逻辑

- 将解码函数 dec 提取为独立变量 DecFunc- 支持通过上下文绑定多种数据源
-优化 unaryHandler 中的解码调用方式
gms 1 month ago
parent
commit
623fb81c43
2 changed files with 22 additions and 18 deletions
  1. 19 15
      transport/http/handler/unary_handler.go
  2. 3 3
      validator/errors.go

+ 19 - 15
transport/http/handler/unary_handler.go

@@ -9,24 +9,28 @@ import (
 	"google.golang.org/grpc"
 )
 
-func unaryHandler(srv any, method grpc.MethodDesc, option *middleware.Option) http.HandlerFunc {
-	return func(ctx http.Context) error {
-		http.SetOperation(ctx, option.Path)
+//支持重写
 
-		dec := func(in any) error {
-			if err := ctx.Bind(&in); err != nil {
-				return err
-			}
-			if err := ctx.BindQuery(&in); err != nil {
-				return err
-			}
-			// Bind URL path variables
-			if err := ctx.BindVars(&in); err != nil {
-				return err
-			}
-			return nil
+var DecFunc = func(ctx http.Context) func(in any) error {
+	return func(in any) error {
+		if err := ctx.Bind(&in); err != nil {
+			return err
 		}
+		if err := ctx.BindQuery(&in); err != nil {
+			return err
+		}
+		// Bind URL path variables
+		if err := ctx.BindVars(&in); err != nil {
+			return err
+		}
+		return nil
+	}
+}
 
+func unaryHandler(srv any, method grpc.MethodDesc, option *middleware.Option) http.HandlerFunc {
+	return func(ctx http.Context) error {
+		http.SetOperation(ctx, option.Path)
+		dec := DecFunc(ctx)
 		httpCtx := ctx
 		interceptor := func(ctx context.Context, req any, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp any, err error) {
 			ctx = middleware.NewOptionContext(ctx, option)

+ 3 - 3
validator/errors.go

@@ -19,9 +19,9 @@ type ValidationError struct {
 
 // Error 实现 error 接口
 func (e *ValidationError) Error() string {
-	if e.FieldPath != "" {
-		return fmt.Sprintf("%s: %s", e.FieldPath, e.Message)
-	}
+	//if e.FieldPath != "" {
+	//	return fmt.Sprintf("%s: %s", e.FieldPath, e.Message)
+	//}
 	return e.Message
 }