mirror of
https://github.com/gin-gonic/gin.git
synced 2025-10-23 18:22:23 +08:00
add GetQueryMap and unittest
This commit is contained in:
parent
0dbfe53d1e
commit
d84be8c579
11
context.go
11
context.go
@ -363,16 +363,25 @@ func (c *Context) GetQueryArray(key string) ([]string, bool) {
|
|||||||
|
|
||||||
// QueryMap returns a map for a given query key.
|
// QueryMap returns a map for a given query key.
|
||||||
func (c *Context) QueryMap(key string) map[string]string {
|
func (c *Context) QueryMap(key string) map[string]string {
|
||||||
|
dicts, _ := c.GetQueryMap(key)
|
||||||
|
return dicts
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueryMap returns a map for a given query key, plus a boolean value
|
||||||
|
// whether at least one value exists for the given key.
|
||||||
|
func (c *Context) GetQueryMap(key string) (map[string]string, bool) {
|
||||||
params := c.Request.URL.Query()
|
params := c.Request.URL.Query()
|
||||||
dicts := make(map[string]string)
|
dicts := make(map[string]string)
|
||||||
|
exist := false
|
||||||
for k, v := range params {
|
for k, v := range params {
|
||||||
if i := strings.IndexByte(k, '['); i >= 1 && k[0:i] == key {
|
if i := strings.IndexByte(k, '['); i >= 1 && k[0:i] == key {
|
||||||
if j := strings.IndexByte(k[i+1:], ']'); j >= 1 {
|
if j := strings.IndexByte(k[i+1:], ']'); j >= 1 {
|
||||||
|
exist = true
|
||||||
dicts[k[i+1:][:j]] = v[0]
|
dicts[k[i+1:][:j]] = v[0]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return dicts
|
return dicts, exist
|
||||||
}
|
}
|
||||||
|
|
||||||
// PostForm returns the specified key from a POST urlencoded form or multipart form
|
// PostForm returns the specified key from a POST urlencoded form or multipart form
|
||||||
|
@ -371,7 +371,8 @@ func TestContextQuery(t *testing.T) {
|
|||||||
func TestContextQueryAndPostForm(t *testing.T) {
|
func TestContextQueryAndPostForm(t *testing.T) {
|
||||||
c, _ := CreateTestContext(httptest.NewRecorder())
|
c, _ := CreateTestContext(httptest.NewRecorder())
|
||||||
body := bytes.NewBufferString("foo=bar&page=11&both=&foo=second")
|
body := bytes.NewBufferString("foo=bar&page=11&both=&foo=second")
|
||||||
c.Request, _ = http.NewRequest("POST", "/?both=GET&id=main&id=omit&array[]=first&array[]=second", body)
|
c.Request, _ = http.NewRequest("POST",
|
||||||
|
"/?both=GET&id=main&id=omit&array[]=first&array[]=second&ids[a]=hi&ids[b]=3.14", body)
|
||||||
c.Request.Header.Add("Content-Type", MIMEPOSTForm)
|
c.Request.Header.Add("Content-Type", MIMEPOSTForm)
|
||||||
|
|
||||||
assert.Equal(t, "bar", c.DefaultPostForm("foo", "none"))
|
assert.Equal(t, "bar", c.DefaultPostForm("foo", "none"))
|
||||||
@ -439,6 +440,30 @@ func TestContextQueryAndPostForm(t *testing.T) {
|
|||||||
values = c.QueryArray("both")
|
values = c.QueryArray("both")
|
||||||
assert.Equal(t, 1, len(values))
|
assert.Equal(t, 1, len(values))
|
||||||
assert.Equal(t, "GET", values[0])
|
assert.Equal(t, "GET", values[0])
|
||||||
|
|
||||||
|
dicts, ok := c.GetQueryMap("ids")
|
||||||
|
assert.True(t, ok)
|
||||||
|
assert.Equal(t, "hi", dicts["a"])
|
||||||
|
assert.Equal(t, "3.14", dicts["b"])
|
||||||
|
|
||||||
|
dicts, ok = c.GetQueryMap("nokey")
|
||||||
|
assert.False(t, ok)
|
||||||
|
assert.Equal(t, 0, len(dicts))
|
||||||
|
|
||||||
|
dicts, ok = c.GetQueryMap("both")
|
||||||
|
assert.False(t, ok)
|
||||||
|
assert.Equal(t, 0, len(dicts))
|
||||||
|
|
||||||
|
dicts, ok = c.GetQueryMap("array")
|
||||||
|
assert.False(t, ok)
|
||||||
|
assert.Equal(t, 0, len(dicts))
|
||||||
|
|
||||||
|
dicts = c.QueryMap("ids")
|
||||||
|
assert.Equal(t, "hi", dicts["a"])
|
||||||
|
assert.Equal(t, "3.14", dicts["b"])
|
||||||
|
|
||||||
|
dicts = c.QueryMap("nokey")
|
||||||
|
assert.Equal(t, 0, len(dicts))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestContextPostFormMultipart(t *testing.T) {
|
func TestContextPostFormMultipart(t *testing.T) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user