json - 如何强制 Servant 返回 JSON 错误而不是纯字符串?
问题描述
默认情况下,即使请求的端点返回 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"}
但看起来并不那么容易。
这个问题说明了可能的解决方案,但我今天无法让它们工作Servant-server 的自定义 JSON 错误
在这个线程中讨论了另一种方法https://github.com/haskell-servant/servant/issues/732但对于这样一个简单的任务来说似乎有点过分了。
不知道 2020 年是否有简单而稳健的解决方案?
解决方案
有一个库叫做servant-errors
. 它提供了一个完全符合您要求的中间件——将错误响应转换为您选择的统一结构,JSON 是内置选项之一。
有关详细信息,请参阅文档,但基本用法与包装一样简单
errorMw @JSON @["error", "status"]
围绕您的应用程序。
推荐阅读
- c# - 如何在 C# 中 P/Invoke 具有未知结构的函数?
- bash - OpenSSL:sha256 散列两个 sha256 散列的最佳方法
- optimization - 找到最小化昂贵成本函数的 n 元组
- node.js - gcloud 函数 deploy build with yarn.lock 不使用 --production 标志
- react-native - React Native + Expo 在某些设备中无法使用后台位置
- java - 如何将 SDK 1.8 添加到导出的 jar 文件 (Intellij jave)
- php - 如何让 php 的 curl 接受 SSLv3?
- r - 如何在ggplot2 R中绘制异常
- tableau-api - 用于密码重置的 Azure B2C SAML 策略访问 URL
- azure - MSI Authorization error when trying to send request via Azure Function