加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 我的Play 2应用程序如何响应客户端的不同“Accept”标

发布时间:2020-12-16 21:31:54 所属栏目:安全 来源:网络整理
导读:在Rails中,我能够做类似于以下的事情: respond_to do |format| format.xml { ... } format.json { ... }end 并且基于客户端在Accept标头中提供的内容将执行适当的块. 如何在Play 2.0(Scala)中做同样的事情? 我会寻找一些看起来像这样的东西: try { Resour
在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(…)
}

case语句按照它们写入的顺序进行尝试,因此如果您的客户端将HTTP Accept标头设置为* / *,则第一个将匹配(在本例中为Accepts.Xml()).因此,您通常首先要写入Accepts.Html()的情况,因为浏览器将Accept标头设置为* / *.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读