gpt4 book ai didi

scala - 我的Play 2应用如何响应客户端的不同 "Accept" header ?

转载 作者:行者123 更新时间:2023-12-04 03:22:34 24 4
gpt4 key购买 nike

在Rails中,我可以执行以下操作:

respond_to do |format|
format.xml { ... }
format.json { ... }
end

然后根据客户端在Accept header 中提供的内容执行适当的块。

如何在Play 2.0(Scala)中做同样的事情?

我希望做一些看起来像这样的事情:
try {
Resources.delete(id)
Ok("done")
}
catch {
case e: ClientReportableException =>
?? match {
case "application/xml" => Ok(<error>{e.message}</error>)
case "application/json" => Ok(...)
}
}

是否有Play习惯用法,还是我只是从请求中获取Accept header 的值?

最佳答案

在Play 2.1中,您可以编写以下内容:

request match {
case Accepts.Xml() => Ok(<error>{e.message}</error>)
case Accepts.Json() => Ok(…)
}

这些case语句将按照其写入的顺序进行尝试,因此,如果您的客户端将HTTP Accept header 设置为 */*,则第一个将匹配(在本示例中为 case Accepts.Xml())。因此,您通常要先写 Accepts.Html()大小写,因为浏览器将 Accept header 设置为 */*

(注意:对于Java中的类似问题,您可能也对 this answer感兴趣)

关于scala - 我的Play 2应用如何响应客户端的不同 "Accept" header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11060761/

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