用凤凰处理传入的帖子json

she*_*per 9 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
Run Code Online (Sandbox Code Playgroud)

router.ex

scope "/webhook", MyApp do
  pipe_through :api

  post "/handle", WebhookController, :handle
end
Run Code Online (Sandbox Code Playgroud)

如果传入的帖子具有内容类型application/json,则body为空.如果内容类型是texttext/plain,则body具有内容.

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

我正在使用Phoenix 1.2

Dog*_*ert 13

当请求的Content-Type是application/json,Plug解析请求体并且Phoenix将其传递params给控制器动作,因此params应该包含您想要的内容并且您不需要读取正文并自己解码:

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