Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: kind_robotОтветов: 1

Я хочу обработать входящий 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

phoenix-frameworkelixir

Ответы

Ответ 1 · рейтинг 15 · Dogbert

Когда 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"}}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы