作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Play with Scala 中的这些 Json 序列化器让我抓狂。
我已经阅读了数十篇文章、教程和文档。尝试了四种不同的实现读取/写入/格式覆盖的方法,但都无济于事。
所以我放弃了自定义类型并决定变得 super 简单:
def suggest = Action(parse.json) {
request =>
request.body.validate[(String, String)].map {
case (suggestion, categories) => Ok("You suggested " + suggestion + " for categories " + categories)
}.recoverTotal {
e => BadRequest(JsError.toFlatJson(e))
}
}
{"suggestion":"add generics", "categories":"request;language;updates"}
最佳答案
玩!为您提供了很多使用 Json 的方法。从代码的外观来看,您正在走元组之路。这基本上可以让您将 Json 转换为元组。您还使用了“读取”,它的缺点是您无法获得精确的错误报告(即:如果传递了无效的 json,您会知道它是无效的……但您不一定知道它为什么无效)。如果您想要更多的错误处理,那么您需要开始使用 'validate' 方法(详细信息在这里:http://www.playframework.com/documentation/2.1.1/ScalaJsonCombinators)。
您可以采用的另一种方法是将 Json 映射到案例类,执行以下操作:
import play.api.libs.json._
case class MyClass(
suggestion: String,
categories: String
)
object MyClass {
implicit val readsMyClass: Reads[MyClass] = new Reads[MyClass] {
def reads(json: JsValue): JsResult[MyClass] = {
for {
suggestion <- (json \ "suggestion").validate[String]
categories <- (json \ "categories").validate[String]
} yield MyClass(json,categories)
}
}
}
关于scala - Play Scala No Json deserializer found for type (String, String)。尝试为这种类型实现隐式读取或格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16183798/
我是一名优秀的程序员,十分优秀!