我编写此代码以使用http4s客户端库对REST Web服务进行POST调用
val client = SimpleHttp1Client()
val form = UrlForm("username" -> userName, "password" -> password)
val uri = Uri.fromString(url).valueOr(throw _)
val list = List(`Content-Type`(MediaType.`application/json`), Accept(MediaType.`application/json`))
val req = POST(uri, form).map(_.putHeaders(list :_*))
try {
val result = client.expect[String](req).unsafePerformSync
Some(result)
} catch {
case e : Throwable => println(e.getMessage); None
}
Run Code Online (Sandbox Code Playgroud)
现在,代码获得了400 Bad Request错误,我不知道为什么.我无法在上面的代码中打印整个错误的主体.
当我通过POSTMAN进行相同的REST调用时,我可以看到400 Bad request error body
{
"errors": [
"password: field is required",
"username: field is required"
]
}
Run Code Online (Sandbox Code Playgroud)
如何在代码中打印整个错误主体?
此外,在postman中,当我设置Content-Type和Accept标头时,后调用成功.在上面的代码中,我设置相同的2个标头和相同的json主体但仍然此代码获得400错误.
val list = List[Header](Header("Accept", "application/json"), Header("Content-Type", "application/json"))
val req = POST(uri, form).map(_.replaceAllHeaders(list :_*))
Run Code Online (Sandbox Code Playgroud)
我和http4s团队在gitter上进行了对话,我找到了答案.由于该对话未被谷歌索引,我在这里写答案
val output : Either[String, Foo] = client.fetch(request) {
case Successful(resp) => resp.as[Foo].map(Right(_))
case resp => resp.as[String].map(Left(_))
}
Run Code Online (Sandbox Code Playgroud)
这是否有错误.我们得到了整个错误的主体.