diff --git a/api/context.go b/api/context.go index 134c5566446964749887edf53a81c2b85a8bb9a0..ffe4a5ebc810718fa77f9ef79a8b67df5cfa0669 100644 --- a/api/context.go +++ b/api/context.go @@ -102,11 +102,11 @@ func (ctx apiContext) extract(name string, t reflect.Type, v reflect.Value) erro var paramStrValues []string if paramStrValue, isDefined := ctx.request.QueryStringParameters[n]; isDefined { if len(paramStrValue) >= 2 && paramStrValue[0] == '[' && paramStrValue[len(paramStrValue)-1] == ']' { - csvReader := csv.NewReader(strings.NewReader(paramStrValue)) + csvReader := csv.NewReader(strings.NewReader(paramStrValue[1 : len(paramStrValue)-1])) var err error paramStrValues, err = csvReader.Read() if err != nil { - return errors.Wrapf(err, "invalid CSV") + return errors.Wrapf(err, "invalid CSV: [%s]", paramStrValue) } } else { paramStrValues = []string{paramStrValue} //single value diff --git a/api/params_test.go b/api/params_test.go index 7e21c3fc83bf5e7fd0283d606b44acd8899e6926..cb5dc0d1c0366d1282f9e69037a502cfdfeec707 100644 --- a/api/params_test.go +++ b/api/params_test.go @@ -99,9 +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 - "find3": "[hendrik,,frederik,johan]", //array of 4 values in CSV notation + "search": "4", //single value parts into string + "find1": "sarel", //single value parsed into array + "find3": "[hendrik,,\"frederik\",\"johan,johan\"]", //array of 4 values in CSV notation }, MultiValueQueryStringParameters: map[string][]string{ "find2": {"hans", "gert"}, //multi-values parsed into array @@ -120,7 +120,7 @@ func TestGet(t *testing.T) { 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.Find3) != 4 || get.Find3[0] != "hendrik" || get.Find3[1] != "" || get.Find3[2] != "frederik" || get.Find3[3] != "johan" { + len(get.Find3) != 4 || get.Find3[0] != "hendrik" || get.Find3[1] != "" || get.Find3[2] != "frederik" || get.Find3[3] != "johan,johan" { t.Fatalf("wrong values") } }