From 3ccaba31631eebc9819d01c6b0f81463a0dee054 Mon Sep 17 00:00:00 2001 From: yusing Date: Fri, 31 Oct 2025 18:06:41 +0800 Subject: [PATCH] fix(validation): prioritize pointer method for custom validation in serialization --- internal/serialization/validation.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/internal/serialization/validation.go b/internal/serialization/validation.go index 650ca740..c0040dc2 100644 --- a/internal/serialization/validation.go +++ b/internal/serialization/validation.go @@ -41,12 +41,17 @@ func ValidateWithCustomValidator(v reflect.Value) gperr.Error { } else { vt := v.Type() if vt.PkgPath() != "" { // not a builtin type + // prioritize pointer method + if v.CanAddr() { + vAddr := v.Addr() + if vAddr.Type().Implements(validatorType) { + return vAddr.Interface().(CustomValidator).Validate() + } + } + // fallback to value method if vt.Implements(validatorType) { return v.Interface().(CustomValidator).Validate() } - if v.CanAddr() { - return validateWithValidator(v.Addr()) - } } } return nil