Scala Akka Http - 编写一个路由编组器来为我的 API 请求返回 XmlResponse

问题描述 投票:0回答:1

我的路线方法是这样的(inSome 和 inSomeStatus 是返回类型 Route 的函数)

def routes(serviceSid: String): Route = {
    path("Some") {
      inSome(serviceSid)
    } ~
    path("SomeStatus") {
      inSomeStatus(serviceSid)
    }
}

我从这里调用这个路由函数:

val routes: Route = {
    pathPrefix("Gateway" / "Services" / sid[String] / "Market") { (serviceSid: String) =>
      routes(serviceSid)
    }

}

现在,我有一个要求,我想返回一个带有 200 状态代码的 XmlResponse,无论 inSome 和 inSomeStatus 函数的结果如何(它们调用一些其他 API,其响应可以是任何内容)。

我想出了这个,但是xml

val routes: Route = {
  pathPrefix("Gateway" / "Services" / sid[ProxyServiceSid] / "Webhooks") { serviceSid =>
    val responseBody: Route = routes(serviceSid) // Get the route for the specified serviceSid
    complete(StatusCodes.OK, responseBody)
  }
}


implicit val routeMarshaller: ToEntityMarshaller[Route] = Marshaller.fromResponse[Route] { route: Route =>
    HttpResponse(StatusCodes.OK, entity = HttpEntity(ContentTypes.`text/xml(UTF-8)`, "Route response"))
}

但是routeMarshaller给出了错误,说

Required -> HttpResponse; Found -> (Route)HttpResponse

建议修复此代码或者可以通过其他方式完成吗?谢谢!!

scala routes akka marshalling akka-http
1个回答
0
投票

如果您总是想回复 OK xml 响应,您可以尝试以下操作:

val routes: Route = {
  pathPrefix("Gateway" / "Services" / sid[ProxyServiceSid] / "Webhooks") { serviceSid =>
      val route: Route = routes(serviceSid)
      val minValidXml = "<xml version=\"1.0\"/>"
      complete(StatusCodes.OK, HttpEntity(ContentTypes.`text/xml(UTF-8)`, minValidXml))
  }
}



© www.soinside.com 2019 - 2024. All rights reserved.