如何强制 Servant return JSON 错误而不是纯字符串?
How to force Servant return JSON errors instead of plain strings?
默认情况下,Servant returns 纯字符串请求,即使请求的端点 returns 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 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"}
不过好像没那么容易
这个问题说明了可能的解决方案,但我今天无法使它们起作用
此线程 https://github.com/haskell-servant/servant/issues/732 中讨论了另一种方法,但对于这样一个简单的任务来说,它看起来有点矫枉过正。
不知2020年是否有简单稳健的解决方案?
有一个图书馆叫 servant-errors
。它提供了一个完全符合您要求的中间件 – 将错误响应转换为具有您选择的统一结构,JSON 是内置选项之一。
查看文档了解详情,但基本用法就像包装一样简单
errorMw @JSON @["error", "status"]
围绕您的申请。
默认情况下,Servant returns 纯字符串请求,即使请求的端点 returns 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 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"}
不过好像没那么容易
这个问题说明了可能的解决方案,但我今天无法使它们起作用
此线程 https://github.com/haskell-servant/servant/issues/732 中讨论了另一种方法,但对于这样一个简单的任务来说,它看起来有点矫枉过正。
不知2020年是否有简单稳健的解决方案?
有一个图书馆叫 servant-errors
。它提供了一个完全符合您要求的中间件 – 将错误响应转换为具有您选择的统一结构,JSON 是内置选项之一。
查看文档了解详情,但基本用法就像包装一样简单
errorMw @JSON @["error", "status"]
围绕您的申请。