Исходя из этого ответа , я знаю, как проанализировать JSON в структуре, используя Poison.decode/2
:
defmodule User do
@derive [Poison.Encoder]
defstruct [:address]
end
defmodule Address do
@derive [Poison.Encoder]
defstruct [:street]
end
Poison.decode(response, as: %User{address: %Address{}})
Но как мне сказать Фениксу делать то же самое? Если я скажу ему, что моя конечная точка принимает JSON, он просто автоматически проанализирует ее на карте:
defmodule MyAppWeb.Router do
use MyAppWeb, :router
pipeline :api do
plug :accepts, ["json"]
end
scope "/api/v1", MyAppWeb do
pipe_through :api
put "/endpoint", MyController, :put
end
end
defmodule MyController do
def put(conn, %{"_json" => map}) do
# Here, `map` is already parsed as a map. How can I tell Phoenix to
# parse it as a struct I choose like I can tell `Poison` to do so?
end
end