Scala Circe无法解码列表为成员的模型

Scala Circe无法解码列表为成员的模型,scala,serialization,deserialization,quill,decoder,Scala,Serialization,Deserialization,Quill,Decoder,我有一个模型,其中包含一个列表作为成员变量,我正试图在Scale中使用Circe对其进行序列化 有关的模式— case class Order(id: Long, tableId: Long, items: List[Item]) { } object Order { implicit val encoder: Encoder[Order] = deriveEncoder[Order] implicit val decoder: Decoder[Order] = deriveDec

我有一个模型,其中包含一个列表作为成员变量,我正试图在Scale中使用Circe对其进行序列化

有关的模式—

case class Order(id: Long, tableId: Long, items: List[Item]) {

}

object Order {
  implicit val encoder: Encoder[Order] = deriveEncoder[Order]

  implicit val decoder: Decoder[Order] = deriveDecoder[Order]
}
此外,项目类别—

case class Item(id: Long, name: String, serving: String) {

}

object Item {
  implicit val encoder: Encoder[Item] = deriveEncoder[Item]

  implicit val decoder: Decoder[Item] = deriveDecoder[Item]
}
我正在使用Circe的半自动编码器功能。但是,当尝试使用quill从数据库读取数据时,我遇到了以下异常-

[error] /Users/in-rmoitra/Projects/PetProjects/Restrofit-Backend/src/main/scala/models/repository/OrderRepository.scala:17:69: exception during macro expansion:
[error] scala.reflect.macros.TypecheckException: Can't find implicit `Decoder[List[models.Item]]`. Please, do one of the following things:
[error] 1. ensure that implicit `Decoder[List[models.Item]]` is provided and there are no other conflicting implicits;
[error] 2. make `List[models.Item]` `Embedded` case class or `AnyVal`.
[error]
[error]     at scala.reflect.macros.contexts.Typers.$anonfun$typecheck$3(Typers.scala:32)
[error]     at scala.reflect.macros.contexts.Typers.$anonfun$typecheck$2(Typers.scala:26)
[error]     at scala.reflect.macros.contexts.Typers.doTypecheck$1(Typers.scala:25)
[error]     at scala.reflect.macros.contexts.Typers.$anonfun$typecheck$7(Typers.scala:38)
[error]     at scala.reflect.internal.Trees.wrappingIntoTerm(Trees.scala:1731)
[error]     at scala.reflect.internal.Trees.wrappingIntoTerm$(Trees.scala:1728)
[error]     at scala.reflect.internal.SymbolTable.wrappingIntoTerm(SymbolTable.scala:18)
[error]     at scala.reflect.macros.contexts.Typers.typecheck(Typers.scala:38)
[error]     at scala.reflect.macros.contexts.Typers.typecheck$(Typers.scala:20)
[error]     at scala.reflect.macros.contexts.Context.typecheck(Context.scala:6)
[error]     at scala.reflect.macros.contexts.Context.typecheck(Context.scala:6)
[error]     at io.getquill.context.QueryMacro.expandQueryWithMeta(QueryMacro.scala:41)
[error]     at io.getquill.context.QueryMacro.expandQuery(QueryMacro.scala:20)
[error]     at io.getquill.context.QueryMacro.runQuery(QueryMacro.scala:12)
[error]     val ordersFuture: Future[List[(Order, (OrderItem, Item))]] = run(query)
根据我对Circe的有限知识和我已经查找到的内容,文档中说,如果您已经有[a]的解码器,则不需要为列表[a]创建解码器


如果有人能把这里发生的事情弄清楚,那就太好了

您的电路代码很好。如果你执行

println(
      parse("""
              |{ "id" : 1,
              |  "tableId" : 2,
              |  "items" : [
              |     { "id": 3,
              |       "name" : "a",
              |       "serving" : "b"
              |     },
              |     { "id": 4,
              |       "name" : "c",
              |       "serving" : "d"
              |     }
              |  ]
              |}
            """.stripMargin)
        .flatMap(json => json.as[Order])
    )
你会得到

Right(Order(1,2,List(Item(3,a,b), Item(4,c,d))))
所以问题在于你的羽毛笔代码

不要混淆
io.circe.Decoder
io.getquill.context.jdbc.Decoders#Decoder


您的电路代码很好。如果你执行

println(
      parse("""
              |{ "id" : 1,
              |  "tableId" : 2,
              |  "items" : [
              |     { "id": 3,
              |       "name" : "a",
              |       "serving" : "b"
              |     },
              |     { "id": 4,
              |       "name" : "c",
              |       "serving" : "d"
              |     }
              |  ]
              |}
            """.stripMargin)
        .flatMap(json => json.as[Order])
    )
你会得到

Right(Order(1,2,List(Item(3,a,b), Item(4,c,d))))
所以问题在于你的羽毛笔代码

不要混淆
io.circe.Decoder
io.getquill.context.jdbc.Decoders#Decoder