gpt4 book ai didi

json - 延迟格式化的递归 JSON 类型无法作为隐式值找到

转载 作者:行者123 更新时间:2023-12-04 18:37:00 26 4
gpt4 key购买 nike

我正在使用 Spray 来构建 REST API。
我的 JSON 数据类型之一是递归的:

case class Container(id: String,
name: String,
read_only: Boolean,
containers: List[Container],
content: List[Content])

object PeriusJsonProtocol extends DefaultJsonProtocol {
implicit val contentFormat = jsonFormat8(Content)
implicit val containerFormat: JsonFormat[Container] = lazyFormat(jsonFormat5(Container))
}

在 HttpService 中完成路由时,出现以下错误:
Error:(49, 18) could not find implicit value for parameter um: spray.httpx.unmarshalling.FromRequestUnmarshaller[Container]
entity(as[Container]) { container =>
^

Error:(49, 18) not enough arguments for method as: (implicit um: spray.httpx.unmarshalling.FromRequestUnmarshaller[Container])spray.httpx.unmarshalling.FromRequestUnmarshaller[Container].
Unspecified value parameter um.
entity(as[Container]) { container =>
^

HttpService 看起来像这样:
import akka.actor.Actor
import spray.routing._
import spray.httpx.SprayJsonSupport._

import PeriusJsonProtocol._

class RestServiceActor extends Actor with RestService {
def actorRefFactory = context
def receive = runRoute(projectsRoute)
}

// this trait defines our service behavior independently from the service actor
trait RestService extends HttpService {
private val PROJECTS = "projects"

val projectsRoute =
path(PROJECTS) {
get {
complete(MongoUtil.getAll(PROJECTS, META) map ContainerMap.fromBson)
//complete(Container("test", "name", false, List(), List()))
} ~ post {
entity(as[Container]) {
//complete(MongoUtil.insertProject(container))
complete(container)
}
}
}
}
completeGET有效,即使该函数返回容器列表。 get 中注释掉的行然而,它不起作用,并且在 post 中隐式转换容器也不起作用。 ,如错误消息中所示。我应该怎么做才能使容器隐式工作并仍然保持其递归结构?

最佳答案

Container 类是根级 json,因此您需要将相应的隐式更改为:

implicit val containerFormat: RootJsonFormat[Container] = rootFormat(lazyFormat(jsonFormat5(Container)))

关于json - 延迟格式化的递归 JSON 类型无法作为隐式值找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33129379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com