Http4s EntityDecoder не выводится автоматически для простого класса дел

Я получаю эту ошибку:

Cannot decode into a value of type com.blah.rest.model.UserProfile, 
because no EntityDecoder[cats.effect.IO, com.blah.rest.model.UserProfile] 
instance could be found.

для следующего класса дел:

case class UserProfile(id: Option[Int], firstName: String, lastName: String)

Обнаружена ошибка на POST код:

case req @ POST -> Root / "v1" / "profiles" =>
  req.as[UserProfile] flatMap {(up: UserProfile) =>
    Ok(service.createProfile(up).asJson)
  }

Со следующим POST тело:

{
   "firstName": "Jack",
   "lastName": "Appleseed"
}

Я думаю, что это происходит, когда тело превращается в UserProfile в req.as[UserProfile]!

Но это простой случай ванили, EntityDecoder должно быть автоматически получено! я знаю akka-http Является ли!

Есть идеи / предложения?

Пожалуйста, обратите внимание: Http4sVersion = "0.18.0-M4" а также circe version "0.9.0-M1"

2 ответа

Решение

Добавляем эту зависимость: "io.circe" %% "circe-generic" % "0.9.1"

разрешил автоматическое кодирование классов case для JSON для меня.

Это позволяет для необходимого импорта: import io.circe.generic.auto._

Ответ:

req.decodeJson[UserProfile] flatMap {(up: UserProfile) =>
    Ok(service.createProfile(up).asJson)
  }

Причина, по которой вы получаете это мост от декодера Circe к http4s EntityDecoder, не является неявной. Вы можете сделать один, если вы просто JSON API, но это не предположение, которое библиотека обычно делает.

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