解析 json POST 正文
Posted
技术标签:
【中文标题】解析 json POST 正文【英文标题】:parse json POST body 【发布时间】:2017-01-06 11:57:15 【问题描述】:使用以下模块定义时
defmodule Router.Folder do
use Maru.Router
namespace :folder do
route_param :id do
get do
IO.puts "ID: " <> params[:id]
json(conn, % user: params[:id], msg: "Hello Elixir World!" )
end
params do
requires :name, type: String
end
post do
IO.puts params[:name]
IO.puts params[:token]
IO.puts params[:id]
IO.puts "Posting"
json(conn, % msg: "Hello Elixir World!" )
#conn |> text("Hello")
end
end # end route_param :id
end # end namespace :folder
end # end defmodule Router.Folder
defmodule FolderService.API do
use Maru.Router
before do
plug Plug.Logger
plug Plug.Parsers,
pass: ["*/*"],
json_decoder: Poison,
parsers: [:urlencoded, :json]
end
mount Router.Folder
end
我收到此错误
**(退出)引发异常: ** (Maru.Exceptions.InvalidFormat) 解析参数错误:名称 (文件夹)lib/folder.ex:29:FolderService.API.route/2 中的匿名 fn/1 (maru) lib/maru/runtime.ex:25: Maru.Runtime.parse_params/3 (文件夹)lib/folder.ex:29:FolderService.API.route/2 中的匿名 fn/1 (文件夹)lib/folder.ex:29:FolderService.API 中的匿名 fn/1。error_handler/1 (文件夹)lib/folder.ex:29:FolderService.API.call/2 中的匿名 fn/1 (文件夹)lib/folder.ex:29:FolderService.API 中的匿名 fn/1。error_handler/1 (插件)lib/plug/adapters/cowboy/handler.ex:15:Plug.Adapters.Cowboy.Handler.upgrade/4 (cowboy) src/cowboy_protocol.erl:442: :cowboy_protocol.execute/4
运行此curl
命令时:
curl -X POST -H "Content-Type: applicaton/json" -d '"name": "foobar"' 'http://localhost:9000/folder/1233'
代码工作正常,但如果我卷曲
curl -X POST -d "name=foobar" 'http://localhost:9000/folder/1233'
【问题讨论】:
错字applicaton
-> application
?
是的,这是一个错字。但是,即使在 curl commnad 中更正了“应用程序”的拼写之后。错误是上面粘贴的那个。
【参考方案1】:
关于模块的一切看起来都不错。问题是,当您尝试使用 curl
发送 POST 请求时,您需要在使用 =
的地方使用 colons
。
这应该可以:curl -X POST -d "name:foobar" 'http://localhost:9000/folder/1233'
发送 POST 数据的示例。
How to POST JSON data with Curl from Terminal/Commandline to Test Spring REST?
【讨论】:
以上是关于解析 json POST 正文的主要内容,如果未能解决你的问题,请参考以下文章
如何将 json 列表传递给 Flutter 中的 http 请求(post)正文?
在 Symfony 2.3 控制器中访问 POST 请求的 JSON 正文