Skip to content

Commit c0a7935

Browse files
authored
faat(encoding/form): allow change the default form encoder and decoder tag name (#3328)
1 parent 7d3be6b commit c0a7935

File tree

2 files changed

+68
-2
lines changed

2 files changed

+68
-2
lines changed

encoding/form/form.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,13 @@ var (
2222
decoder = form.NewDecoder()
2323
)
2424

25+
// This variable can be replaced with -ldflags like below:
26+
// go build "-ldflags=-X github.com/go-kratos/kratos/v2/encoding/form.tagName=form"
27+
var tagName = "json"
28+
2529
func init() {
26-
decoder.SetTagName("json")
27-
encoder.SetTagName("json")
30+
decoder.SetTagName(tagName)
31+
encoder.SetTagName(tagName)
2832
encoding.RegisterCodec(codec{encoder: encoder, decoder: decoder})
2933
}
3034

encoding/form/form_test.go

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,68 @@ import (
1717
ectest "github.com/go-kratos/kratos/v2/internal/testdata/encoding"
1818
)
1919

20+
// This variable can be replaced with -ldflags like below:
21+
// go test "-ldflags=-X github.com/go-kratos/kratos/v2/encoding/form.tagNameTest=form"
22+
var tagNameTest string
23+
24+
func init() {
25+
if tagNameTest == "" {
26+
tagNameTest = tagName
27+
}
28+
}
29+
30+
func TestFormEncoderAndDecoder(t *testing.T) {
31+
t.Cleanup(func() {
32+
encoder.SetTagName(tagName)
33+
decoder.SetTagName(tagName)
34+
})
35+
36+
encoder.SetTagName(tagNameTest)
37+
decoder.SetTagName(tagNameTest)
38+
39+
type testFormTagName struct {
40+
Name string `form:"name_form" json:"name_json"`
41+
}
42+
v, err := encoder.Encode(&testFormTagName{
43+
Name: "test tag name",
44+
})
45+
if err != nil {
46+
t.Fatal(err)
47+
}
48+
jsonName := v.Get("name_json")
49+
formName := v.Get("name_form")
50+
switch tagNameTest {
51+
case "json":
52+
if jsonName != "test tag name" {
53+
t.Errorf("got: %s", jsonName)
54+
}
55+
if formName != "" {
56+
t.Errorf("want: empty, got: %s", formName)
57+
}
58+
case "form":
59+
if formName != "test tag name" {
60+
t.Errorf("got: %s", formName)
61+
}
62+
if jsonName != "" {
63+
t.Errorf("want: empty, got: %s", jsonName)
64+
}
65+
default:
66+
t.Fatalf("unknown tag name: %s", tagNameTest)
67+
}
68+
69+
var tn *testFormTagName
70+
err = decoder.Decode(&tn, v)
71+
if err != nil {
72+
t.Fatal(err)
73+
}
74+
if tn == nil {
75+
t.Fatal("nil tag name")
76+
}
77+
if tn.Name != "test tag name" {
78+
t.Errorf("got %s", tn.Name)
79+
}
80+
}
81+
2082
type LoginRequest struct {
2183
Username string `json:"username,omitempty"`
2284
Password string `json:"password,omitempty"`

0 commit comments

Comments
 (0)