json - 如何在不为整个应用程序重新定义 `errorHandler` 的情况下从 JSON 处理程序发出 JSON 错误?

标签 json haskell yesod

我正在尝试构建一个包含 JSON 服务的站点。所以我想对不同的处理程序进行不同的错误处理。例如,notFound必须在 Handler Html 中返回 HTML“未找到”和 JSON 值 {"error": "not found"}Handler Value .我怎样才能实现它?

即使我使用自己的 notFoundJson , Yesod 的 get404不会,即使在 Handler Value 中也返回 HTML .

  1. 我应该在 errorHandler 中获取处理程序的返回类型吗? ?
  2. 我应该做 /api一个子站点并覆盖 errorHandler为了它?
  3. 我应该再做一个 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/

相关文章:

php - 将数组从 json 解码为 PHP,但无法使用键访问数组元素

ios - 如何在 iOS 的 UITableView 的最后一行添加一行字符串?

multithreading - 在线程中调用 'yield' 有哪些好的用例?

linux - Haskell Yesod 问题

haskell - 在 Yesod 中显示动态生成的图像

yesod - 干净地关闭 warp 服务器而不退出进程

php - 如何获取来自另一个域的json数据?

javascript - 为什么我要无限循环 for() 循环?

function - Haskell 中的运算符和函数优先级

Haskell:并行计算和monads的 'sequential property'