This is an automated email from the ASF dual-hosted git repository.

alexstocks pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git


The following commit(s) were added to refs/heads/develop by this push:
     new 762e905e9 feat(generic): support protobuf-json serialization in 
generic filter (#3170)
762e905e9 is described below

commit 762e905e97c823e15cd67deab1069ec80990d142
Author: CAICAII <[email protected]>
AuthorDate: Fri Jan 23 22:08:02 2026 +0800

    feat(generic): support protobuf-json serialization in generic filter (#3170)
    
    * feat(generic): support protobuf-json serialization in generic filter
    
    Add protobuf-json generalizer support to the Filter layer, enabling
    generic calls with protobuf-json serialization for Triple protocol.
    
    - Update isGeneric() to recognize 'protobuf-json' and 'gson' types
    - Add protobuf-json case in getGeneralizer() to return 
ProtobufJsonGeneralizer
    - Add corresponding unit tests for the new functionality
    
    * refactor(generic): use strings.EqualFold for case-insensitive comparison
---
 filter/generic/util.go      | 14 ++++++++------
 filter/generic/util_test.go | 17 ++++++++++++++---
 2 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/filter/generic/util.go b/filter/generic/util.go
index 2e5b22b62..5ed6cd321 100644
--- a/filter/generic/util.go
+++ b/filter/generic/util.go
@@ -49,17 +49,19 @@ func isMakingAGenericCall(invoker base.Invoker, invocation 
base.Invocation) bool
 
 // isGeneric receives a generic field from url of invoker to determine whether 
the service is generic or not
 func isGeneric(generic string) bool {
-       lowerGeneric := strings.ToLower(generic)
-       return lowerGeneric == constant.GenericSerializationDefault
+       return strings.EqualFold(generic, constant.GenericSerializationDefault) 
||
+               strings.EqualFold(generic, constant.GenericSerializationGson) ||
+               strings.EqualFold(generic, 
constant.GenericSerializationProtobufJson)
 }
 
 func getGeneralizer(generic string) (g generalizer.Generalizer) {
-       switch strings.ToLower(generic) {
-       case constant.GenericSerializationDefault:
+       switch {
+       case strings.EqualFold(generic, constant.GenericSerializationDefault):
                g = generalizer.GetMapGeneralizer()
-       case constant.GenericSerializationGson:
+       case strings.EqualFold(generic, constant.GenericSerializationGson):
                g = generalizer.GetGsonGeneralizer()
-
+       case strings.EqualFold(generic, 
constant.GenericSerializationProtobufJson):
+               g = generalizer.GetProtobufJsonGeneralizer()
        default:
                logger.Debugf("\"%s\" is not supported, use the default 
generalizer(MapGeneralizer)", generic)
                g = generalizer.GetMapGeneralizer()
diff --git a/filter/generic/util_test.go b/filter/generic/util_test.go
index 5fdc066c1..42d8603a3 100644
--- a/filter/generic/util_test.go
+++ b/filter/generic/util_test.go
@@ -75,9 +75,13 @@ func TestIsMakingAGenericCall(t *testing.T) {
 func TestIsGeneric(t *testing.T) {
        assert.True(t, isGeneric("true"))
        assert.True(t, isGeneric("True"))
+       assert.True(t, isGeneric("gson"))
+       assert.True(t, isGeneric("Gson"))
+       assert.True(t, isGeneric("protobuf-json"))
+       assert.True(t, isGeneric("Protobuf-Json"))
        assert.False(t, isGeneric("false"))
        assert.False(t, isGeneric(""))
-       assert.False(t, isGeneric("bean")) // 目前代码逻辑仅匹配 "true"
+       assert.False(t, isGeneric("bean"))
 }
 
 func TestGetGeneralizer(t *testing.T) {
@@ -87,6 +91,13 @@ func TestGetGeneralizer(t *testing.T) {
        g2 := getGeneralizer(constant.GenericSerializationGson)
        assert.IsType(t, generalizer.GetGsonGeneralizer(), g2)
 
-       g3 := getGeneralizer("unsupported_type")
-       assert.IsType(t, generalizer.GetMapGeneralizer(), g3)
+       g3 := getGeneralizer(constant.GenericSerializationProtobufJson)
+       assert.IsType(t, generalizer.GetProtobufJsonGeneralizer(), g3)
+
+       // test case insensitive
+       g4 := getGeneralizer("Protobuf-Json")
+       assert.IsType(t, generalizer.GetProtobufJsonGeneralizer(), g4)
+
+       g5 := getGeneralizer("unsupported_type")
+       assert.IsType(t, generalizer.GetMapGeneralizer(), g5)
 }

Reply via email to