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

时间:2014-07-23 11:22:37

标签: json haskell yesod

我正在尝试在其中构建一个包含JSON服务的网站。所以我希望为不同的处理程序提供不同的错误处理。例如,notFound必须返回HTML"未找到" Handler Html中的{"error": "not found"}Handler Value中的JSON值notFoundJson。我怎样才能实现它?

即使我使用自己的get404,Yesod' Handler Value也不会在errorHandler内返回HTML。

  1. 我应该在/api内找到处理程序的返回类型吗?
  2. 我应该将errorHandler作为子网站并覆盖errorHandler吗?
  3. 我应该使用自己的特定{{1}}创建另一个yesod,并将其作为子网站连接到主yesod?

1 个答案:

答案 0 :(得分:2)

简单的解决方案:您无法做任何事情。这是客户关注的问题。

根据defaultErrorHandler实现,接收客户端JSON错误的正确方法似乎是在请求中提供HTTP标头Accept: application/json或查询参数?_accept=application/json

defaultErrorHandler本身提供两种表示形式:一种用于text/html客户端,另一种用于application/json客户端。默认是前者。

更通用的解决方案:添加WAI middleware,为特定网址添加HTTP标头Accept: application/json或查询参数?_accept=application/json