【发布时间】:2016-03-29 00:13:56
【问题描述】:
我是 Scala 和 Play 框架的新手。我尝试从数据表中查询选定列的所有数据并将它们保存为 Excel 文件。
选定的列通常有不同的类型,例如 Int、Str、Timestamp 等。
我想转换所有值类型,包括 null 到 String (null转换为空字符串“”) 不知道列的实际类型,因此代码可以用于任何表。
根据Play的文档,我可以在下面编写隐式转换器,但是,这不能处理null。 google了很久,没找到解决办法。有人可以告诉我如何在隐式转换器中处理 null 吗?
先谢谢了~
implicit def valueToString: anorm.Column[String] =
anorm.Column.nonNull1[String] { (value, meta) =>
val MetaDataItem(qualified, nullable, clazz) = meta
value match {
case s: String => Right(s) // Provided-default case
case i: Int => Right(i.toString()) // Int to String
case t: java.sql.Clob => Right(t.toString()) // Blob/Text to String
case d: java.sql.Timestamp => Right(d.toString()) // Datatime to String
case _ => Left(TypeDoesNotMatch(s"Cannot convert $value: ${value.asInstanceOf[AnyRef].getClass} to String for column $qualified"))
}
}
【问题讨论】:
-
您在运行时看到了什么错误?
-
错误信息:java.lang.RuntimeException: Left(UnexpectedNullableFound(ColumnName(.valuea,Some(valuea)))) at anorm.MayErr$$anonfun$get$1.apply(MayErr.scala: 35)