我的路线方法是这样的(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
。
建议修复此代码或者可以通过其他方式完成吗?谢谢!!
如果您总是想回复 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))
}
}