在 Rails 中,我能够执行类似于以下的操作:
respond_to do |format|
format.xml { ... }
format.json { ... }
end
并且将根据客户端在 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(...)
}
}
是否有一个 Play 习惯用法,或者我只是从请求中获取 Accept 标头的值?
在 Play 2.1 中,您可以编写以下内容:
request match {
case Accepts.Xml() => Ok(<error>{e.message}</error>)
case Accepts.Json() => Ok(…)
}
案例语句按照编写顺序进行尝试,因此如果您的客户端设置了 HTTPAccept
标头至*/*
第一个将匹配(在本例中case Accepts.Xml()
)。所以,你通常想写Accepts.Html()
首先是情况,因为浏览器设置了Accept
标头至*/*
.
(注:您可能还感兴趣这个答案 https://stackoverflow.com/questions/10676577/render-output-format-html-json-xml-depending-on-parameter/10685804#10685804对于 Java 中的类似问题)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)