diff --git a/examples/general/dubbo/go-client/app/client.go b/examples/general/dubbo/go-client/app/client.go
index 9b50ca0a36e23793ff39e228852dd84bb70f90ce..956ab7466ce6262e559f2a9e1129189f3ac7536c 100644
--- a/examples/general/dubbo/go-client/app/client.go
+++ b/examples/general/dubbo/go-client/app/client.go
@@ -301,7 +301,7 @@ func test3() {
 
 	time.Sleep(3 * time.Second)
 	println("\n\n\nstart to generic invoke")
-	resp, err := referenceConfig.GetRPCService().(*config.GenericService).Invoke([]interface{}{"GetUser", []string{"java.lang.String"}, []hessian.Object{"A003"}})
+	resp, err := referenceConfig.GetRPCService().(*config.GenericService).Invoke([]interface{}{"GetUser", []string{"java.lang.String"}, "A003"})
 	if err != nil {
 		panic(err)
 	}
diff --git a/filter/impl/generic_filter.go b/filter/impl/generic_filter.go
index e23c34ebc299e52c21e146946d004d829954f488..d369ca0a52390684837099f4b456ae03e3e24613 100644
--- a/filter/impl/generic_filter.go
+++ b/filter/impl/generic_filter.go
@@ -18,6 +18,7 @@
 package impl
 
 import (
+	hessian "github.com/apache/dubbo-go-hessian2"
 	"reflect"
 	"strings"
 )
@@ -42,10 +43,14 @@ func init() {
 type GenericFilter struct{}
 
 func (ef *GenericFilter) Invoke(invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result {
-	if invocation.MethodName() == constant.GENERIC {
-		var newArguments = invocation.Arguments()
-		for i := range newArguments {
-			newArguments[i] = struct2MapAll(newArguments[i])
+	if invocation.MethodName() == constant.GENERIC && len(invocation.Arguments()) == 3 {
+		var (
+			oldArguments = invocation.Arguments()
+		)
+		newArguments := []interface{}{
+			oldArguments[0],
+			oldArguments[1],
+			hessian.Object(struct2MapAll(oldArguments[2])),
 		}
 		newInvocation := invocation2.NewRPCInvocation(invocation.MethodName(), newArguments, invocation.Attachments())
 		return invoker.Invoke(newInvocation)
@@ -61,9 +66,13 @@ func GetGenericFilter() filter.Filter {
 	return &GenericFilter{}
 }
 func struct2MapAll(obj interface{}) map[string]interface{} {
+	result := make(map[string]interface{})
+	if obj == nil {
+		return result
+	}
 	t := reflect.TypeOf(obj)
 	v := reflect.ValueOf(obj)
-	result := make(map[string]interface{})
+
 	if reflect.TypeOf(obj).Kind() == reflect.Struct {
 		for i := 0; i < t.NumField(); i++ {
 			if v.Field(i).Kind() == reflect.Struct {