如何处理播放2中的单个控制器操作中的多种内容类型

如何处理播放2中的单个控制器操作中的多种内容类型

问题描述:

我想单个控制器操作处理多种类型的请求(json和url编码值)。我已经得到了这通过模式匹配上的内容类型的工作在一定程度上:如何处理播放2中的单个控制器操作中的多种内容类型

request.contentType match { 
     case Some("application/json") => { // Do some stuff with JSON ... } 
     case _ => { // Treat it like a regular html form ... } 

这工作,但似乎并不像一个伟大的方法。我还没有能够得到结果类型不同(当我得到表单提交时,当我得到json和html时返回json)。

人们通常如何处理这种情况。它气馁了吗?

+0

为什么你想在一个动作中处理这两种类型的请求?我会通过制定两个控制器操作来处理这种情况。 – Wellingr

+0

另请参阅http://stackoverflow.com/questions/9675657/request-content-type-in​​-play-framework-for-rest-webservices – Somatik

我认为,如果它是XML/JSON例如那么它会感觉不那么奇怪,然后form-post/JSON。

在正常的操作中,您将不得不分析已经获得实例的请求。 这使得你描述的有点困难,但你可能需要创建一个EssentialAction来查看RequestHeader并从中选择一个主体解析器,并将解析主体传递给回调函数。

如果您决定走这条路,我会建议您查看文档的动作组成部分(http://www.playframework.com/documentation/2.2.x/ScalaActionsComposition)以及相关类的源代码(您在播放安装中有它们)。