我收到此错误:
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"
答案 0 :(得分:2)
添加此依赖项:
"io.circe" %% "circe-generic" % "0.9.1"
为我解决了案例类的自动编码为JSON。
它允许所需的导入:import io.circe.generic.auto._
答案 1 :(得分:1)
答案是:
req.decodeJson[UserProfile] flatMap {(up: UserProfile) =>
Ok(service.createProfile(up).asJson)
}
你得到的原因是从Circe解码器到http4s EntityDecoder的桥接不是隐含的。如果你纯粹是一个JSON API,你可以制作一个,但这不是图书馆通常可以做出的假设。