【发布时间】:2015-11-18 04:54:44
【问题描述】:
我正在试用 Akka-http,希望有人能阐明以下问题:
如何根据请求中的 accept: 标头创建不同的路由?例如,我想要一个处理“json”的代码路径和一个处理“xml”请求的代码路径(如果缺少标头,则默认为“json”)
如果我不想推断 contentType,我该如何指定它?例如,在下面的代码中,我尝试通过 compactPrint() 运行 json,但这会将其更改为字符串,因此是“text/plain”。我想覆盖它并告诉客户它仍然是 json。
我的代码是这样的;
...
path("api") {
get {
complete {
getStuff.map[ToResponseMarshallable] {
case Right(r) if r.isEmpty => List[String]().toJson.compactPrint
case Right(r) => r.toJson.compactPrint
case Left(e) => BadRequest -> e
}
}
}
}
...
这种情况下的响应是 text/plain,因为 compactPrint 创建了一个字符串。 非常欢迎批评。 ;)
【问题讨论】:
-
要使用 akka-http 的自动内容协商功能,您需要为您的源类型提供一个编组器,该编组器可以编组为多个内容类型。您可以使用
Marshaller.oneOf来组合不同的编组器,其中每个编组器都知道如何编组为一种内容类型。您是否在 doc.akka.io/docs/akka-stream-and-http-experimental/1.0/scala/… 看到过有关 marshaller 的文档? -
谢谢。我确实最终选择了这条路线。
-
@jrudolph 链接已失效