- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
elm/http 1.0.0 将 Http.Error
定义为
type Error
= BadUrl String
| Timeout
| NetworkError
| BadStatus (Response String)
| BadPayload String (Response String)
但是2.0.0改成了
type Error
= BadUrl String
| Timeout
| NetworkError
| BadStatus Int
| BadBody String
当收到 BadStatus
时,我无法获取请求的主体,只能获取状态代码。在docs Evan 为此提出了一个解决方案,但我不明白如何让它发挥作用。
如果我们定义自己的 expectJson
类似于
expectJson : (Result Http.Error a -> msg) -> D.Decoder a -> Expect msg
expectJson toMsg decoder =
expectStringResponse toMsg <|
\response ->
case response of
Http.BadStatus_ metadata body ->
Err (Http.BadStatus metadata.statusCode)
...
然后我们可以访问元数据和正文,但我该如何使用它们呢?我是否应该定义自己的 myBadStatus
并将其返回?
Http.BadStatus_ metadata body ->
Err (myBadStatus metadata.statusCode body)
这行得通吗?
我需要的是转换以下代码:
myErrorMessage : Http.Error -> String
myErrorMessage error =
case error of
Http.BadStatus response ->
case Decode.decodeString myErrorDecoder response.body of
Ok err ->
err.message
Err e ->
"Failed to parse JSON response."
...
谢谢。
最佳答案
编辑 22/4/2019:我针对 2.0+ 版的 http-extras 更新了此答案,其中有一些 API 更改。感谢 Berend de Boer 指出这一点!
下面的答案给出了一个使用我编写的包的解决方案(根据要求),但您不必使用该包!我写了一个entire article关于如何从 HTTP 响应中提取详细信息,它包括多个不需要该包的 Ellie 示例,以及一个使用该包的示例。
正如 Francesco 提到的,我正是为此目的创建了一个包,使用问题中描述的类似方法:https://package.elm-lang.org/packages/jzxhuang/http-extras/latest/ .
具体来说,要使用Http.Detailed
的模块。它定义了一个 Error 类型,使原始主体保持在错误状态:
type Error body
= BadUrl String
| Timeout
| NetworkError
| BadStatus Metadata body Int
| BadBody Metadata body String
像这样发出请求:
type Msg
= MyAPIResponse (Result (Http.Detailed.Error String) ( Http.Metadata, String ))
sendRequest : Cmd Msg
sendRequest =
Http.get
{ url = "/myapi"
, expect = Http.Detailed.expectString MyAPIResponse
在您的更新中,处理结果,包括在 BadStatus 时解码正文:
update msg model =
case msg of
MyAPIResponse httpResponse ->
case httpResponse of
Ok ( metadata, respBody ) ->
-- Do something with the metadata if you need! i.e. access a header
Err error ->
case error of
Http.Detailed.BadStatus metadata body statusCode ->
-- Try to decode the body the body here...
...
...
感谢 Francisco 就此事与我联系,希望这个答案能帮助遇到与 OP 相同问题的任何人。
关于http - 榆树 0.19 : How to obtain request body when receiving BadStatus with elm/http 2. 0.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54379403/
这是我的第一个主题here的继续,该主题是有关如何使用代码模拟屏幕触摸的。 我想将此功能整合到 float 的屏幕聊天头中(就像facebook所做的那样)。因此,基本上,当我点击聊天头时,此服务将模
安装应用程序时遇到以下问题: 使用Worklight控制台,我正在上载.wlapp文件,删除已部署的应用程序,然后尝试再次上载相同的.wlapp。 然后,Worklight Console被卡住,甚至
我进行了 LDAP 目录搜索并收到了一些结果。我需要迭代这些结果并显示每个条目的 Dn。 在我的测试环境中,我通过获取entryDN属性的值来返回Dn值。 在生产环境中,entryDN 属性始终返回
在调试器中,当执行这样一行代码时我“卡住”了:lock (myvar) 显然其他人持有myvar。但是我希望在这一行 myvar 应该是免费的。所以我想知道代码的哪一部分包含 myvar (来自另一个
我正在做一些序列化,其中还包含需要存储为字符串的 IFile 路径。 我在插件项目中使用这个 IFile。为调试或运行 Eclipse 启动一个新工作区。这个测试工作区的根目录相对于插件文件夹。我的问
我知道这个问题已经得到回答,但我不明白人们到底在做什么(关于证书,ssl),他们都使用本地主机而不是我。 我使用此示例作为示例 OpenIdConnect 我正在使用: 一个网络应用程序 一个 Web
我正在尝试获取当前星期以在SQLite中进行日期比较。 我上个月,去年,今天,昨天都没问题...但是找不到当前星期的解决方案。 我尝试了很多事情,例如: SELECT tastings.* FROM
我有兴趣将大部分使用Thrust GPU库编写的代码移植到多核CPU。值得庆幸的是,the website说推力代码可以与诸如OpenMP/Intel TBB之类的线程环境一起使用。 我在下面编写了一
我需要创建一个 PHP 应用程序,在给定主题标签的情况下,它会向我返回一个 XML,其中包含与该主题标签相关的帖子。 我在开发者部分登录 Instagram 并填写了应用程序设置表格。 已生成“客户端
当我从 Gradle 任务运行集成测试时,我的集成测试失败。 org.springframework.data.solr.UncategorizedSolrException: **SolrCore
这个问题已经有答案了: java.lang.IllegalStateException: Iterator already obtained (1 个回答) 已关闭 8 年前。 所以我写了一个小Jav
谁能告诉我为什么会出现以下异常? java.rmi.ServerException: RuntimeException; nested exception is: java.lang.Ille
当我尝试从 WCF 测试客户端运行我的应用程序时,我收到以下错误: Error: Cannot obtain Metadata from http://localhost:53867/MyAPI.sv
我有几个变量分配给同一个函数。属性“name”为“”,因为此函数是匿名的; 也没有涉及函数调用,因此没有被调用者。 JS有没有办法通过自己实现的反射算法获取变量名? 例如 var x = functi
只是想知道是否有人知道如何查询 Facebook Credits (FBC) API 以获取用户拥有的信用数?我的应用程序有此要求,并且 FBC API 中没有对此进行解释或提及。 谢谢 最佳答案 也
我正在使用 Spring Batch 3.0.5。关于 MySql 序列表的引擎类型的相同问题。与 spring-batch-storage-engine-as-myisam-than-innodb
我想我遗漏了一些明显的东西,但我就是想不通如何获取 CCMenuItemFont 的标签。 背景我正在为 iPad 构建一个简单的刽子手游戏。为了输入下一个猜测,我在 UI 中添加了 26 个按钮(每
我正在开发一个 Android 应用程序 (API 15) 并在尝试编写单元测试时遇到以下问题: 我使用 android.os.Parcel 来保存一个类(例如,如果屏幕翻转)并将它发送到另一个 Ac
我正在利用 C++ 全局变量的构造函数的行为在启动时以简单的方式运行代码。这是一个非常简单的概念,但有点难以解释,所以让我粘贴代码: struct _LuaVariableRegistration {
在 C# 中,如何获取对给定类的基类的引用? 例如,假设您有一个特定的类 MyClass,并且您想要获取对 MyClass 的父类(super class)的引用。 我的想法是这样的: Type s
我是一名优秀的程序员,十分优秀!