fix(httpx): support array field for request dto (#4026)

Co-authored-by: yshi3 <yshi3@tesla.com>
This commit is contained in:
shyandsy 2024-03-30 12:10:56 +08:00 committed by GitHub
parent f12802abc7
commit 3ef59f6a71
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 12 additions and 7 deletions

View File

@ -19,14 +19,18 @@ func TestParseForm(t *testing.T) {
Name string `form:"name"`
Age int `form:"age"`
Percent float64 `form:"percent,optional"`
Statuses []string `form:"statuses[],optional"`
}
r, err := http.NewRequest(http.MethodGet, "/a?name=hello&age=18&percent=3.4", http.NoBody)
r, err := http.NewRequest(http.MethodGet, "/a?name=hello&age=18&percent=3.4&statuses[]=try&statuses[]=done", http.NoBody)
assert.Nil(t, err)
assert.Nil(t, Parse(r, &v))
assert.Equal(t, "hello", v.Name)
assert.Equal(t, 18, v.Age)
assert.Equal(t, 3.4, v.Percent)
assert.Equal(t, 2, len(v.Statuses))
assert.True(t, v.Statuses[0] == "try" || v.Statuses[1] == "try")
assert.True(t, v.Statuses[0] == "done" || v.Statuses[1] == "done")
}
func TestParseForm_Error(t *testing.T) {

View File

@ -21,9 +21,10 @@ func GetFormValues(r *http.Request) (map[string]any, error) {
params := make(map[string]any, len(r.Form))
for name := range r.Form {
formValue := r.Form.Get(name)
if len(formValue) > 0 {
params[name] = formValue
if len(r.Form[name]) > 1 {
params[name] = r.Form[name]
} else if len(r.Form[name]) == 1 {
params[name] = r.Form.Get(name)
}
}