使用Play渲染JSON!和斯卡拉

前端之家收集整理的这篇文章主要介绍了使用Play渲染JSON!和斯卡拉前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个关于从 Scala类渲染 JSON对象的简单问题.为什么我必须实现反序列化器(读,写).

我有以下案例类:

case class User(firstname:String,lastname:String,age:Int)

在我的控制器中:

val milo:User = new User("Sam","Fisher",23);

Json.toJson(milo);

我得到编译错误:找不到类型models.User的Json反序列化器.尝试为此类型实现隐式写入或格式.

在我以前的项目中,我必须在类中实现一个reader,writer对象才能工作,我发现它非常烦人.

object UserWebsite {
  implicit object UserWebsiteReads extends Format[UserWebsite] {

    def reads(json: JsValue) = UserWebsite(
      (json \ "email").as[String],(json \ "url").as[String],(json \ "imageurl").as[String])

    def writes(ts: UserWebsite) = JsObject(Seq(
      "email" -> JsString(ts.email),"url" -> JsString(ts.url),"imageurl" -> JsString(ts.imageurl)))
  }
}

解决方法

我真的建议升级到2.1-RC1,因为在这里,JSON编写器/阅读器很容易定义(更多细节 here)

但为了帮助您避免一些错误,我会给你一个进口提示
– 仅使用这些进口! (注意不包括json.Reads)

import play.api.libs.json._
import play.api.libs.functional.Syntax._
import play.api.libs.json.Writes._

而且你只需编写这段代码就可以将你的课程写入/从Json读取(当然你将拥有User而不是Address:

implicit val addressWrites = Json.writes[Address]
implicit val addressReads = Json.reads[Address]

现在,它们将自动使用:

写的例子:

Ok(Json.toJson(entities.map(s => Json.toJson(s))))

阅读的例子(我把我的例子用于通过从身体读取json来创建实体)请注意这里使用的addressReads

def create = Action(parse.json) { request =>
        request.body.validate(addressReads).map { entity =>
          Addresses.insert(entity)
          Ok(RestResponses.toJson(RestResponse(OK,"Succesfully created a new entity.")))
        }.recover { Result =>
          BadRequest(RestResponses.toJson(RestResponse(BAD_REQUEST,"Unable to transform JSON body to entity.")))
        }
}

总之,他们尝试(并成功)使JSON的事情变得非常简单.

猜你在找的JavaScript相关文章