有没有办法在被 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
在编码器中获取最终状态即可。