所以我有一个API,其中一个入口点类似于:
module SomeModule
module SomeOtherModule
class Users < SomeModule::SomeOtherModule::Base
helpers do
params :user do
requires :user, type: Hash do
requires :device_id, type: String, desc: "Device ID"
end
end
end
desc "Some description"
params do
use :user
end
put "/", route_name: :v1_put_user_path do
...
end
end
end
end
SomeModule :: SomeOtherModule :: Base 继承自 Grape :: API
我的客户正在发送身体中的参数 - 看起来像:
{"user[device_id]":"xyz"}
由于这就像一根绳子,我无法识别它们。所以返回:
{"error":"user is missing"}
这意味着在我的服务器上我得到了:
{"user[device_id]"=>"00999877",
"route_info"=>
...
当我期待看到:
{"user"=>{"device_id"=>"00999877"},
"route_info"=>
...
关于我应该如何定义我的参数的任何想法?......或者某人偶然发现了这个问题并且可以提供一些解决方案
答案 0 :(得分:0)
你必须像这样定义你的params块:
module SomeModule
module SomeOtherModule
class Users < SomeModule::SomeOtherModule::Base
params do
group :user, type: Hash do
requires :device_id, type: String, desc: "Device ID"
end
end
put "/", route_name: :v1_put_user_path do
...
end
end
end
end
<强>更新强>
解释解决方案......
如果您的客户端正在发送类似下面代码的JSON,那么您必须定义一个组块并将类型参数定义为Hash。当您的客户发送&#34;表单字段时,同样的规则也适用。比如user [device_id]。
{ user: { device_id: 1 } }
更新2
我刚注意到您的客户端向您的服务发送了错误的JSON。这个JSON不应该......
{"user[device_id]":"xyz"}
...因为它不是您所期望的API。相反,它应该发送
{ user: { device_id: "xyz" } }.