1
0
mirror of https://github.com/go-kratos/kratos.git synced 2025-09-16 09:16:35 +02:00

faat(encoding/form): allow change the default form encoder and decoder tag name (#3328)

This commit is contained in:
jessetang
2024-06-01 16:07:17 +08:00
committed by GitHub
parent 7d3be6bcd0
commit c0a7935bb1
2 changed files with 68 additions and 2 deletions

View File

@@ -22,9 +22,13 @@ var (
decoder = form.NewDecoder()
)
// This variable can be replaced with -ldflags like below:
// go build "-ldflags=-X github.com/go-kratos/kratos/v2/encoding/form.tagName=form"
var tagName = "json"
func init() {
decoder.SetTagName("json")
encoder.SetTagName("json")
decoder.SetTagName(tagName)
encoder.SetTagName(tagName)
encoding.RegisterCodec(codec{encoder: encoder, decoder: decoder})
}

View File

@@ -17,6 +17,68 @@ import (
ectest "github.com/go-kratos/kratos/v2/internal/testdata/encoding"
)
// This variable can be replaced with -ldflags like below:
// go test "-ldflags=-X github.com/go-kratos/kratos/v2/encoding/form.tagNameTest=form"
var tagNameTest string
func init() {
if tagNameTest == "" {
tagNameTest = tagName
}
}
func TestFormEncoderAndDecoder(t *testing.T) {
t.Cleanup(func() {
encoder.SetTagName(tagName)
decoder.SetTagName(tagName)
})
encoder.SetTagName(tagNameTest)
decoder.SetTagName(tagNameTest)
type testFormTagName struct {
Name string `form:"name_form" json:"name_json"`
}
v, err := encoder.Encode(&testFormTagName{
Name: "test tag name",
})
if err != nil {
t.Fatal(err)
}
jsonName := v.Get("name_json")
formName := v.Get("name_form")
switch tagNameTest {
case "json":
if jsonName != "test tag name" {
t.Errorf("got: %s", jsonName)
}
if formName != "" {
t.Errorf("want: empty, got: %s", formName)
}
case "form":
if formName != "test tag name" {
t.Errorf("got: %s", formName)
}
if jsonName != "" {
t.Errorf("want: empty, got: %s", jsonName)
}
default:
t.Fatalf("unknown tag name: %s", tagNameTest)
}
var tn *testFormTagName
err = decoder.Decode(&tn, v)
if err != nil {
t.Fatal(err)
}
if tn == nil {
t.Fatal("nil tag name")
}
if tn.Name != "test tag name" {
t.Errorf("got %s", tn.Name)
}
}
type LoginRequest struct {
Username string `json:"username,omitempty"`
Password string `json:"password,omitempty"`