Play Framework 2.1中的新ScalaJson功能让我有些迷惑。我想在枚举中写读和写。
这是我的代码:
object EnumA extends Enumeration {
type EnumA = Value
val VAL1, VAL2, VAL3 = Value
def parse(str:String) : EnumA = {
str.toUpperCase() match {
case "VAL1" => VAL1
case "VAL2" => VAL2
case "VAL3" => VAL3
case _ => null
}
}}
任何想法 ?
谢谢。
简短答案:使用类似Play Enumeration Utils的工具。
长答案,而不是将“读取” 放入 您的枚举,您可以为“枚举”类型创建可重复使用的读取:
object EnumA extends Enumeration {
type EnumA = Value
val VAL1, VAL2, VAL3 = Value
}
object EnumUtils {
def enumReads[E <: Enumeration](enum: E): Reads[E#Value] = new Reads[E#Value] {
def reads(json: JsValue): JsResult[E#Value] = json match {
case JsString(s) => {
try {
JsSuccess(enum.withName(s))
} catch {
case _: NoSuchElementException => JsError(s"Enumeration expected of type: '${enum.getClass}', but it does not appear to contain the value: '$s'")
}
}
case _ => JsError("String value expected")
}
}
}
然后,当您想将某些内容解析为枚举时,请为作用域中的特定Enum类型创建一个隐式的Reads:
import some.thing.EnumUtils
implicit val myEnumReads: Reads[EnumA.Value] = EnumUtils.enumReads(EnumA)
val myValue: EnumA.Value = someJsonObject.as[EnumA.Value]
要么
val myValue: EnumA.Value = someJsonObject.asOpt[EnumA.Value].getOrElse(sys.error("Oh noes! Invalid value!"))
(在Scala中使用null被认为是错误的形式。)
用JsValues编写枚举比较简单:
object EnumUtils {
...
implicit def enumWrites[E <: Enumeration]: Writes[E#Value] = new Writes[E#Value] {
def writes(v: E#Value): JsValue = JsString(v.toString)
}
}
然后,在尝试编写枚举(或将其显式传递给toJson
函数之前),将其导入作用域:
import EnumUtils.enumWrites
val myEnumJson: JsValue = Json.toJson(EnumA.VAL1)
您可以类似地使函数创建一个结合读取和写入的Format对象:
object EnumUtils {
....
implicit def enumFormat[E <: Enumeration](enum: E): Format[E#Value] = {
Format(EnumReader.enumReads(enum), EnumWriter.enumWrites)
}
}
问题内容: 我有一个有趣的json数据,看起来像: 我写了案例类和自定义内容: 当我使用以下方法验证提供的数据时: 我得到: 我可以像这样使用JsPath访问它 但是我真的不知所措,我在自定义读取方面做错了什么。我已经尝试过放置另一个顶级键和其他组合,但是似乎我缺少了一些关键的东西,因为我是从今天开始的。 非常感谢。 问题答案: 错误告诉您不是数组而是数组。因此,似乎您应该阅读JSON 而不是 假
我正在尝试使用PlayJava模板创建小型CRUD应用程序。我通过cmd使用typesafeactivator创建了一个新项目,所以现在我想启用ebean并更改mysql数据库。im使用激活器1.3。6,对于使用我的phpmyadmin sql 5.6的sql im。20我在谷歌上搜索了一下,我做了所有的事情,比如纪录片,但我仍然无法解决我的问题我无法添加ebean我的项目,我无法连接mysql连
问题内容: 在文件中,在Play创建的默认项目中!,有这行: 我了解,如果需要添加更多样式,则必须在视图脚本中使用 应该在哪里,但是似乎很难将值设置为完整的HTML 标签。如果视图需要添加更多样式或脚本,该怎么办? 谢谢! 问题答案: 您可以通过以下方式设置更多样式: 像脚本:
在 JSON 基础一节中,我们介绍了 Reads 和 Writes 转换器。使用它们,我们可以在 JsValue 结构和其他数据类型之间做转换。这一节将更详细地介绍如何构建这些转换器,以及在转换的过程中如何进行验证。 这一节使用到的 JsValue 结构以及相应的模型: import play.api.libs.json._ val json: JsValue = Json.parse(""" {
问题内容: 我想知道(我的Java应用程序的)播放框架版本与我的应用程序的Java版本之间是否有任何联系? 示例:如果我使用play 2.2.1并在计算机上安装了java8。我可以在代码中使用java8吗? 如果有连接。java8的第一个播放版本是什么? 谢谢你妮芙 问题答案: Play 2.3.x是提及Java 8的第一个版本,请参见此处 今天早晨,我正在与我的一位同事交谈,他发现运行2.1.x
在用400k记录查询MongoDb时,我得到了< code>OutOfMemoryError。我收集了大约40万条用户记录。当我试图检索所有用户(在弹性搜索中转储)时,我得到了< code>OutOfMemoryError错误。 我已经浏览过这个链接,在application.config中添加了jvm.memory=-Xms64m -Xmx1024m,但还是一样的异常。 这是我的堆栈跟踪 -