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, но это не предположение, которое библиотека обычно делает.