Так у меня есть API, где одна из точек входа выглядит примерно так:Попытка разобрать тело запроса в Grape 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 наследованные из винограда :: API
Мой клиент посылает Params в теле - которые выглядят как:
{"user[device_id]":"xyz"}
Поскольку это приходят как струны, я не в состоянии признать them.Therefore возвращение:
{"error":"user is missing"}
Это означает, что на моем сервере я получаю:
{"user[device_id]"=>"00999877",
"route_info"=>
...
Когда я ожидал увидеть:
{"user"=>{"device_id"=>"00999877"},
"route_info"=>
...
Любые идеи о том, как я должен определить свои Params? ... или, может быть, кто-то наткнуться на этот вопрос и может дать какое-то решение
1. Мое плохое !. Когда я разместил вопрос, который должен был упомянуть, у меня есть параметры, определенные в блоке помощников 2. У меня был недостающий конец 3. Параметр пользователя был определен как Hash, хотя;). 4. Обратите внимание, что в моем описании я написал, что у меня есть эта проблема, когда значения отправляются внутри тела как JSON. У меня нет проблем, когда они передаются как параметры – Daniel
В этом случае, я думаю, что ваш клиент отправляет неправильный JSON. Этот JSON не должен быть {"user [device_id]": "xyz"}, потому что это не то, что ожидает ваш API. Вместо этого он должен отправить {user: {device_id: "xyz"}}. – Marlon
я просто запустить некоторые тесты и кажется, что формат JSON я ожидаю получить не один я на самом деле getting.Meaning я хочу получить: { «пользователь»: { «device_id»: 1231232 } } Но клиент генерирует {"user [device_id]": "1"}.Какой да, делает точку вашего раздела «обновление» – Daniel