我创建了一个简单的路线:
class MyRoutes[F[_] : Async](service: MyService[F]) extends Http4sDsl[F] {
def routes: HttpRoutes[F] = HttpRoutes.of[F] {
case req@PUT -> Root / "bets" =>
for {
bet <- req.as[Bet]
created <- service.put(bet)
response <- Created(created)
} yield response
}
implicits
以及用于输入和输出的 jsons :
object jsons {
implicit def circeDecoder[A[_] : Sync, B: Decoder]: EntityDecoder[A, B] = jsonOf[A, B]
implicit def circeEncoder[A[_] : Sync, B: Encoder]: EntityEncoder[A, B] = jsonEncoderOf[A, B]
}
但是当我通过 Postman 运行这个程序时,我得到了一个错误:
The request body was invalid.
带有422
错误代码。我认为json编码器和解码器有问题,因为我的要求非常简单明了:
{
"stake": 434,
"name": "Something"
}
我试图在路由中添加一个隐式解码器:
implicit val betDecoder: EntityDecoder[F, Bet] = jsonOf[F, Bet]
但这也无济于事。谁能帮助我并告诉我如何为 jsons 创建好的编码器和解码器?我使用circe
库进行解析。