在Poison编码之前,有没有办法将HTTP状态放在特定的结构中?
我想更常见的问题是我可以在编码器的conn
功能级别访问encode
吗?我正在尝试构建一个类似于此处指定的API:http://jsonapi.org/examples/#error-objects
在我的控制器功能中,我有这个,它在请求发送出门之前透明地放置HTTP状态。但是,如果某个插件修改了管道中的HTTP状态,那么在创建ApiMessage期间我放置的状态也需要更新。
conn |> put_status(:forbidden) |> json(%ApiMessage{ status: 403, message: "Nope" })
这是我要编码的结构:
defmodule MyApp.ApiMessage do
@enforce_keys [:message]
defstruct message: nil, success: false, status: 422
end
我想使用自定义编码器在编码结构之前放置HTTP状态,如下所示:
defimpl Poison.Encoder, for: [MyApp.ApiMessage] do
def encode(t, _options) do
# get conn here somehow and set the status to current
# conn status
end
end
这可以在凤凰城做吗?我想我只需要弄清楚如何让编码器中的最终conn
获得状态。