如何在Play项目中解析JSON请求

时间:2014-06-13 00:36:39

标签: json scala playframework

我正在使用Scala + Play构建一个简单的Web服务器。我无法弄清楚如何接受JSON请求并将其反序列化为我预定义类型的对象。我需要帮助1)下载一个支持良好的JSON包,2)在我的代码中导入包以解析HTTP请求,3)实际解析一些JSON。

以下是我在#1的SBT文件中添加的内容:

libraryDependencies += "org.json4s" %% "json4s-native" % "3.2.9"

以下是我尝试将其导入#2的方式:

import org.json4s._
import org.json4s.native.JsonMethods._

这是我尝试在我的行动中解析一些JSON的地方:

package controllers

import play.api._
import play.api.mvc._
import play.api.libs.json.Json
import org.json4s._
import org.json4s.native.JsonMethods._

object Application extends Controller {
  case class Credentials(username: String, password: String)

  def login = Action { request =>
      Ok(Json.obj("message" -> "You tried to log in as: " + parse(request.body).extract[Credentials].username))
  }
}

谁能告诉我我做错了什么?我在运行时遇到错误,说:“play.PlayExceptions $ CompilationException:编译错误[controllers.Application.parse.type不接受参数]”

1 个答案:

答案 0 :(得分:5)

您正遭受命名空间污染。您的Application控制器从parse特征继承play.api.mvc.Controller对象,import org.json4s.native.JsonMethods._在命名空间中包含自己的parse。我甚至惊讶于编译。使其更明确将有效。从导入中删除通配符,并显式调用JsonMethods.parse

正如这些意见所暗示的那样,这一切都是不必要的。 Play内置的json库工作得很好,所以我也建议你阅读它们并使用它们。还有很多与Play JSON相关的其他SO帖子。