Sun*_*mar 2 json scala playframework-2.0
我有一个类似的案例类在这里找到:
case class WebCategory(topGroupName: String,
topGroupID: String,
webCategoryName : String,
webCategoryID : String,
subWebCats:Seq[SubWebCat])
case class SubWebCat(name:String, id:String)
Run Code Online (Sandbox Code Playgroud)
我的请求主体json具有与case类完全相同的键名.例如:
{
"webCategoryID" : "blah",
"webCategoryName" : "abcabc",
"topGroupID" : "blah",
"topGroupName" : "namehere",
"subWebCats" : [
{
"name" : "blah",
"id" : "idblah"
},
{
"name" : "another blah",
"id" : "another idblah"
}
]
}
Run Code Online (Sandbox Code Playgroud)
case class和req body键是相同的,那么是否可以直接从请求json构建case类对象?如果有可能那我该怎么办呢?任何参考都会有帮助.如果不可能,那么这意味着我要定义我在答案中解释的自定义隐式转换器,其中我没有任何实现它的问题.
注意:我正在使用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]
}
Run Code Online (Sandbox Code Playgroud)
然后,在您的控制器操作中:
def save: Action(parse.json) { implicit request =>
request.body.validate[WebCategory].fold(
errors => BadRequest(errors.mkString),
category => Ok("saved category")
)
}
Run Code Online (Sandbox Code Playgroud)