Обработка входящей почты json с помощью Phoenix

Я хочу обработать входящий POST с типом содержимого application/json. Я просто пытаюсь вернуть опубликованный 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, то тело пусто. Если тип содержимого - text или text/plain, тогда содержимое имеет тело.

Как правильно анализировать тело входящего application/json запроса?

Я использую Phoenix 1.2


person kind_robot    schedule 30.12.2016    source источник


Ответы (1)


Когда 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"}}
person Dogbert    schedule 30.12.2016
comment
Не могли бы вы указать где-нибудь в документации или исходном коде, где это объясняется дальше? - person category; 27.09.2018
comment
@category проверить - person Dogbert; 27.09.2018