【问题标题】:Reading QueryArray from Gin golang从 Gin golang 中读取 QueryArray
【发布时间】:2017-06-12 19:20:09
【问题描述】:

您好,我正在向我的 gin 服务器传递一个查询参数,如下所示:

卷曲 -X POST \
'http://localhost:4000/url?X=val1&Y=val2&x[]=1&x[]=2'

然后将其发送到我的杜松子酒处理函数

func handler (c *gin.Context) {
    fmt.Println(c.Query("X"))
    fmt.Println(c.Query("Y"))
    fmt.Println(c.QueryArray("x"))
}

虽然 c.Query("x") 和 c.Query("Y") 有效,但 c.QueryArray("x") 无效!

我不确定我在这里错过了什么。我也尝试过 GET 请求,但它不起作用。

其他不适合我的实验在这里:

fmt.Println(c.Params.Get("x"))
fmt.Println(c.Params.Get("gene"))
fmt.Println(c.PostFormArray("x"))

【问题讨论】:

  • 你能试试这个curl -X POST 'http://localhost:4000/url?X=val1&Y=val2&x=1&x=2'吗?
  • 你确定这是 POST 请求吗?您没有帖子正文。
  • @jeevatkm 刚刚成功.. 非常感谢!
  • 不客气,添加详细答案。

标签: go go-gin


【解决方案1】:

从我的评论中为 SO 用户起草的答案。

使用值重复字段名称:

curl -X POST 'http://localhost:4000/url?X=val1&Y=val2&x=1&x=2'

或:

以逗号分隔:

curl -X POST 'http://localhost:4000/url?X=val1&Y=val2&x=1,2'

【讨论】:

    【解决方案2】:

    这可能是过度设计的,但它为我完成了工作:

    // @Param property_type query []uint32 false "property_types"
    func (svc *HttpService) acceptListofQuery(c *gin.Context) {
        var propertyTypes []uint32
        propertyTypes, done := svc.parsePropTypes(c)
        if done {
            return
        }
        // ..... rest of logic here
        c.JSON(200, "We good")
    }
    
    func (svc *HttpService) parsePropTypes(c *gin.Context) ([]uint32, bool) {
        var propertyTypes []uint32
        var propertyTypesAsString string
        var propertyTypesAsArrayOfStrings []string
        propertyTypesAsString, success := c.GetQuery("property_types")
        propertyTypesAsArrayOfStrings = strings.Split(propertyTypesAsString, ",")
        if success {
            for _, propertyTypeAsString := range propertyTypesAsArrayOfStrings {
                i, err := strconv.Atoi(propertyTypeAsString)
                if err != nil {
                    svc.ErrorWithJson(c, 400, errors.New("invalid property_types array"))
                    return nil, true
                }
                propertyTypes = append(propertyTypes, uint32(i))
            }
       }
        return propertyTypes, false
    }
    

    然后你可以发送类似的东西:

    curl -X POST 'http://localhost:4000/url?property_types=1,4,7,12
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-01
      • 2018-05-12
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      相关资源
      最近更新 更多