如何将GET请求的JSON主体映射到参数?

时间:2015-11-12 00:03:46

标签: grape grape-api

我的终端中有以下定义:

params do
    requires :entities do
      requires :id, type: String
      optional :email, type: String
      optional :phone, type: String
    end
  end
  post "test" do

  end

请注意,这仅作为POST请求,以下CURL将起作用:

curl -XPOST localhost/test 
     -H 'Content-Type: application/json' 
     -H 'Accept: application/json' 
     -d '{ "entities": [{ "id": 3, "email": "test@abc.com" }] }'

但是,当我将声明更改为“test”而不是post时,由于以下验证错误,使用-XGET的相应curl请求不再起作用:

{"error":"entities is missing"}

如果删除params要求,我可以在运行时手动检查params散列,看看它只有一个键“route_info”

我目前正在使用Grape 0.7.0

1 个答案:

答案 0 :(得分:1)

之所以发生这种情况,是因为通过指定-d选项,您可以在请求正文中传递参数,而您的端点期望它们在路径中作为URL的一部分。检查here为什么在GET请求中传递body参数是个坏主意。

但是,如果与-G组合使用,则可以使用该选项。

  

-G, - get

     

使用时,此选项将使用-d, - data, - data-binary或--data-urlencode指定的所有数据在HTTP GET请求中使用                 而不是否则将使用的POST请求。数据将通过'?'附加到网址上。分离器。

使用get的{​​{1}}请求如下所示:

-d