我正在尝试构建一个包含 JSON 服务的站点。所以我想对不同的处理程序进行不同的错误处理。例如,notFound
必须在 Handler Html
中返回 HTML“未找到”和 JSON 值 {"error": "not found"}
在Handler Value
.我怎样才能实现它?
即使我使用自己的 notFoundJson
, Yesod 的 get404
不会,即使在 Handler Value
中也返回 HTML .
- 我应该在
errorHandler
中获取处理程序的返回类型吗? ? - 我应该做
/api
一个子站点并覆盖errorHandler
为了它? - 我应该再做一个 yesod,有自己的特定
errorHandler
, 并将其连接到主 yesod 作为子站点?
最佳答案
简单的解决方案:您无需执行任何操作。这是客户关心的问题。
根据 defaultErrorHandler
实现,客户端接收 JSON 错误的正确方法似乎是提供 HTTP header Accept: application/json
或查询参数 ? _accept=application/json
在请求中。
defaultErrorHandler
本身提供了两种表示:一种用于text/html
客户端,一种用于application/json
客户端。默认为前者。
更通用的解决方案: 添加 WAI middleware附加 HTTP header Accept: application/json
或查询参数 ?_accept=application/json
用于特定的 url。
关于json - 如何在不为整个应用程序重新定义 `errorHandler` 的情况下从 JSON 处理程序发出 JSON 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24909148/