diff --git a/api/context.go b/api/context.go index c559326e8915b5c6d0cc4330a803c14e825a5ba7..26e7fb20d7cc3a13c32256fdd7207634522c01d3 100644 --- a/api/context.go +++ b/api/context.go @@ -100,7 +100,11 @@ func (ctx apiContext) extract(name string, t reflect.Type, v reflect.Value) erro //get value(s) from query string var paramStrValues []string if paramStrValue, isDefined := ctx.request.QueryStringParameters[n]; isDefined { - paramStrValues = []string{paramStrValue} //single value + if len(paramStrValue) >= 2 && paramStrValue[0] == '[' && paramStrValue[len(paramStrValue)-1] == ']' { + paramStrValues = strings.Split(paramStrValue[1:len(paramStrValue)-1], ",") //from [CSV] + } else { + paramStrValues = []string{paramStrValue} //single value + } } else { paramStrValues = ctx.request.MultiValueQueryStringParameters[n] } diff --git a/api/params_test.go b/api/params_test.go index ae0a415d1a894ec7a88c0fa3db236d7307642030..7e21c3fc83bf5e7fd0283d606b44acd8899e6926 100644 --- a/api/params_test.go +++ b/api/params_test.go @@ -83,6 +83,7 @@ type MyGetParams struct { Find string `json:"find"` Find1 []string `json:"find1"` Find2 []string `json:"find2"` + Find3 []string `json:"find3"` } func TestGet(t *testing.T) { @@ -98,8 +99,9 @@ func TestGet(t *testing.T) { "id": "1", "limit": "2", "offset": "3", - "search": "4", //single value parts into string - "find1": "sarel", //single value parsed into array + "search": "4", //single value parts into string + "find1": "sarel", //single value parsed into array + "find3": "[hendrik,,frederik,johan]", //array of 4 values in CSV notation }, MultiValueQueryStringParameters: map[string][]string{ "find2": {"hans", "gert"}, //multi-values parsed into array @@ -117,7 +119,8 @@ func TestGet(t *testing.T) { t.Logf("get: %+v", get) if get.ID != 1 || get.Offset != 3 || get.Limit != 2 || get.Search != "4" || get.Find != "koos" || len(get.Find1) != 1 || get.Find1[0] != "sarel" || - len(get.Find2) != 2 || get.Find2[0] != "hans" || get.Find2[1] != "gert" { + len(get.Find2) != 2 || get.Find2[0] != "hans" || get.Find2[1] != "gert" || + len(get.Find3) != 4 || get.Find3[0] != "hendrik" || get.Find3[1] != "" || get.Find3[2] != "frederik" || get.Find3[3] != "johan" { t.Fatalf("wrong values") } }