Bil*_*ill 10 scala playframework-2.0
在Rails中,我能够做类似以下的事情:
respond_to do |format|
format.xml { ... }
format.json { ... }
end
Run Code Online (Sandbox Code Playgroud)
并根据客户端在Accept标头中提供的内容执行相应的块.
我怎么能在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(...)
}
}
Run Code Online (Sandbox Code Playgroud)
是否有Play成语,或者我只是从请求中获取Accept标头的值?
Jul*_*Foy 14
在Play 2.1中,您可以编写以下内容:
request match {
case Accepts.Xml() => Ok(<error>{e.message}</error>)
case Accepts.Json() => Ok(…)
}
Run Code Online (Sandbox Code Playgroud)
案例语句按照它们的写入顺序进行尝试,因此如果您的客户端将HTTP Accept标头设置*/*为第一个,则匹配(在此示例中case Accepts.Xml()).因此,您通常希望首先编写Accepts.Html()案例,因为浏览器将Accept标头设置为*/*.
(注意:您可能也对Java中类似问题的答案感兴趣)