json - 如何强制 Servant 返回 JSON 错误而不是纯字符串?

标签 json haskell servant

默认情况下,即使请求的端点返回 JSON,Servant 也会返回纯字符串请求

$ http $S/signup email=mail@domain.com
HTTP/1.1 400 Bad Request
Connection: keep-alive
Date: Tue, 14 Apr 2020 15:59:32 GMT
Server: nginx/1.17.9 (Ubuntu)
Transfer-Encoding: chunked

Error in $: parsing Credentials.Credentials(Credentials) failed, key "password" not found

我试图将这些字符串包装成简单的 JSON 字典:

$ http $S/signup email=mail@domain.com
HTTP/1.1 400 Bad Request
Connection: keep-alive
Date: Tue, 14 Apr 2020 15:59:32 GMT
Server: nginx/1.17.9 (Ubuntu)
Transfer-Encoding: chunked

{"error": "Error in $: parsing Credentials.Credentials(Credentials) failed, key \"password\" not found"}

但看起来并没有那么容易。

这个问题陈述了可能的解决方案,但我今天无法让它们工作 Custom JSON errors for Servant-server

此线程中讨论了另一种方法 https://github.com/haskell-servant/servant/issues/732但对于这样一个简单的任务来说,这看起来有点矫枉过正。

2020年有没有简单稳健的解决方案?

最佳答案

有一个图书馆叫servant-errors .它提供了一个完全符合您要求的中间件 – 将错误响应转换为具有您选择的统一结构,JSON 是内置选项之一。

查看文档了解详情,但基本用法就像包装一样简单

errorMw @JSON @["error", "status"]

围绕您的应用程序。

关于json - 如何强制 Servant 返回 JSON 错误而不是纯字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61212088/

相关文章:

haskell - 在 Servant 的 API 端点内发出请求

haskell - 使用仆人-客户模式匹配的问题

android - 在 sqlite 数据库中插入行的最快方法是什么

java - 我该如何解析这个json?

haskell - Haskell 中真正导入的内容

haskell - 如何在 IO monad 中使用可变结构

javascript - 如何根据公共(public)键值减少对象数组?

javascript - 从 JavaScript 访问 JSON 元素

haskell - 使用 Integer 作为参数时出现非法类型错误

api - 了解 Servant 论文中的 'echo' 服务示例 API