用凤凰处理传入的帖子json

时间:2016-12-30 14:03:50

标签: elixir phoenix-framework

我想要使用application/json内容类型处理传入的POST。我只是试图将发布的JSON作为对此类测试的响应返回:

WebhookController控制器

pipeline :api do
  plug :accepts, ["json"]
end

def handle(conn, params) do
  {:ok, body, conn} = Plug.Conn.read_body(conn)    
  json(conn, %{body: body})
end

router.ex

scope "/webhook", MyApp do
  pipe_through :api

  post "/handle", WebhookController, :handle
end

如果传入的帖子的内容类型为application/json,则正文为空。如果内容类型为texttext/plain,则正文包含内容。

解析传入的application/json请求正文的正确方法是什么?

我正在使用Phoenix 1.2

1 个答案:

答案 0 :(得分:11)

当请求的Content-Type为application/json时,Plug解析请求正文,Phoenix将其作为params传递给控制器​​操作,因此params应该包含您想要的内容和你不需要阅读身体并自己解码:

def handle(conn, params) do
  json(conn, %{body: params})
end
$ curl -XPOST -H 'Content-Type: application/json' --data-binary '{"foo": "bar"}' http://localhost:4000/handle
{"body":{"foo":"bar"}}