json - 在 play 和 scala 中请求正文到案例类转换

标签 json scala playframework-2.0

我有一个与此类似的案例类 found here :

case class WebCategory(topGroupName: String,
                       topGroupID: String,
                       webCategoryName : String,
                       webCategoryID : String,
                       subWebCats:Seq[SubWebCat])

case class SubWebCat(name:String, id:String)

我的请求正文 json 具有与案例类完全相同的键名。例如:

{
  "webCategoryID" : "blah",
  "webCategoryName" : "abcabc",
  "topGroupID" : "blah",
  "topGroupName" : "namehere",
  "subWebCats" : [
    {
      "name" : "blah",
      "id" : "idblah"
    },
            {
      "name" : "another blah",
      "id" : "another idblah"
    } 

  ]

}

案例类和请求正文键相同,那么是否可以直接从请求 json 构建案例类对象?如果可能的话,我该怎么做?任何引用资料都会有所帮助。如果不可能,那么这意味着我必须定义我在 answer 中解释的自定义隐式转换器。我在其中实现它没有任何问题。

注意:我正在使用 Play 2.3 和 Scala 11 进行开发

最佳答案

您可以非常轻松地使用 Play 的内置 JSON 验证。您不需要为此添加任何第三方依赖项。

case class WebCategory(topGroupName: String,
                       topGroupID: String,
                       webCategoryName : String,
                       webCategoryID : String,
                       subWebCats:Seq[SubWebCat])

object WebCategory {
  implicit val fmt = Json.format[WebCategory]
}

case class SubWebCat(name:String, id:String)

object SubWebCat {
  implicit val fmt = Json.format[SubWebCat]
}

然后,在您的 Controller 操作中:

def save: Action(parse.json) { implicit request =>
  request.body.validate[WebCategory].fold(
    errors => BadRequest(errors.mkString),
    category => Ok("saved category")
  )
}

关于json - 在 play 和 scala 中请求正文到案例类转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29341616/

相关文章:

playframework - Play Framework 集下载文件名

java - 如何在大型 JSON 文件中查找位置

javascript - jQuery 奇怪的 json 解析问题

scala - 为什么 scala 不能将 Long switch 语句编译为 tableswitch

scala - 为什么使用 JavaUUID 完成请求会导致编译错误?

java - Play 2.0 Framework模板引擎中的计算

php - 如何判断一个json数组是否为空?

java - 从 MySQL 下载 Android App 数据的有效方法

Scala "<-"用于理解

play2 中的路线 : How to match a part of the url