Очень простой вызов не может быть сделан с использованием http4s

Я написал этот простой scala-код, используя библиотеку http4s

import org.http4s.client.blaze._

object ScalaHttpTest extends App {
  val c = PooledHttp1Client()
  val rTask = c.expect[String]("""http://localhost:50070/webhdfs/v1/user/?op=LISTSTATUS""")
  val x = rTask.attemptRun.toEither
  if (x.isRight) println(x.right)
  if (x.isLeft) println(x.left)
  c.shutdownNow()
}

Если я копирую, вставляю свой URL в chrome, почтальон, curl, он отлично работает и показывает вывод

HTTP/1.1 200 OK
Cache-Control: no-cache
Expires: Sun, 11 Sep 2016 04:11:26 GMT
Date: Sun, 11 Sep 2016 04:11:26 GMT
Pragma: no-cache
Expires: Sun, 11 Sep 2016 04:11:26 GMT
Date: Sun, 11 Sep 2016 04:11:26 GMT
Pragma: no-cache
Content-Type: application/json
Transfer-Encoding: chunked
Server: Jetty(6.1.26.cloudera.4)

{"FileStatuses":{"FileStatus":[

]}}

вот скриншот из хрома

Но мой код выдает сообщение об ошибке

[info] Compiling 1 Scala source to /home/user/MyProjects/ScalaHttpTest/target/scala-2.11/classes...
[info] Running com.abhi.ScalaHttpTest 
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
LeftProjection(Left(org.http4s.client.UnexpectedStatus: unexpected HTTP status: 500 Internal Server Error))
[success] Total time: 4 s, completed Sep 10, 2016 11:09:40 PM

Process finished with exit code 0

1 ответ

Решение

Вы expectв String, В терминах HTTP это означает, что вы предполагаете Content-Type из text/*, Служба, однако, (правильно) возвращает Content-Type из application/json, Чтобы справиться с этим, вы захотите использовать один из подпроектов интеграции JSON http4s, например, поддержку Argonaut, и expect[Json] вместо.

Другие вопросы по тегам