我正在使用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不接受参数]”
答案 0 :(得分:5)
您正遭受命名空间污染。您的Application
控制器从parse
特征继承play.api.mvc.Controller
对象,import org.json4s.native.JsonMethods._
在命名空间中包含自己的parse
。我甚至惊讶于编译。使其更明确将有效。从导入中删除通配符,并显式调用JsonMethods.parse
。
正如这些意见所暗示的那样,这一切都是不必要的。 Play内置的json库工作得很好,所以我也建议你阅读它们并使用它们。还有很多与Play JSON相关的其他SO帖子。