我正在用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不带参数]”
您正遭受名称空间污染的困扰。您的Application
控制器parse
从play.api.mvc.Controller
特征继承一个对象,并在名称空间中import org.json4s.native.JsonMethods._
包含它自己的对象parse
。我很惊讶这甚至编译。使它更明确将起作用。从导入中删除通配符,然后显式调用JsonMethods.parse
。
正如评论所暗示的那样,这实际上是不必要的。Play内置的json库运行良好,因此我还建议您阅读并使用它们。还有许多其他与Play JSON相关的SO帖子。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句