HTTP4S + ZIO 项目添加静态文件路由时EntityEncoder匹配失败问题求助
HTTP4S + ZIO 项目添加静态文件路由时EntityEncoder匹配失败问题求助
嘿,各位大佬好!我最近在给我的ZIO+Http4s项目添加静态文件路由时遇到了个棘手的问题,想请大家帮忙看看怎么解决。
先说说之前的情况:我已经为ZIO应用创建了HttpRoutes,代码如下,之前一直运行得很正常:
class BlockChainAPI[R <: BlockChain] { type BlockChainTask[A] = RIO[R, A] private val dsl = Http4sDsl[BlockChainTask] import dsl._ implicit def jsonDecoder[A](implicit decoder: Decoder[A]): EntityDecoder[BlockChainTask, A] = jsonOf[BlockChainTask, A] implicit def jsonEncoder[A](implicit encoder: Encoder[A]): EntityEncoder[BlockChainTask, A] = jsonEncoderOf[BlockChainTask, A] val routes: HttpRoutes[BlockChainTask] = HttpRoutes.of[BlockChainTask] { case GET -> Root / "message" / message => val newMessage = BlockMessage(message) BlockChain .addBlock(Seq(newMessage)) .foldZIO( err => BadRequest(err.getMessage), _ => Ok(s"Message $message added") ) } }
但是今天我新增了一个根路由,想返回静态的API文档页面,代码是这样的:
case GET -> Root => StaticFile.fromPath(fs2.io.file.Path("/api-docs/index.html")).getOrElse(NotFound()).foldZIO( err => InternalServerError(err.getMessage), result => Ok(result) )
结果直接报错了,错误信息是:
Cannot convert from Product with java.io.Serializable to an Entity, because no EntityEncoder[[A]zio.ZIO[R,Throwable,A], Product with java.io.Serializable] instance could be found.
我尝试添加了一个额外的Encoder:
implicit def jsonEncoder2[A <: Product with Serializable](implicit encoder: Encoder[A]): EntityEncoder[BlockChainTask, A] = jsonEncoderOf[BlockChainTask, A]
但这个方法完全没用,问题依然存在。有没有大佬知道这个问题该怎么解决呀?
备注:内容来源于stack exchange,提问作者Arlengur
相关产品推荐
相关产品推荐

