Anorm:隐式转换[所有值(包括null)]到[String]

时间:2016-03-29 00:13:56

标签: scala anorm

我是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"))
        }

    }

1 个答案:

答案 0 :(得分:1)

documentation所示,如果有Column[T],允许解析类型T的列,并且列(如果列)可以为空,则{{1应该被问到,从Option[T]的通用支持中受益。

这是一个自定义Option[T](确保使用自定义的Column[String],因此应该询问Column[String]

Option[String]