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)
}