问题 Anorm解析浮点值


在Play framework 2.0中,我试图使用像这样的行解析器从PostgreSQL加载一个真实的(即单精度浮点)类型列:

case class Foo(bar: Float)

object Foo {
    def all = DB.withConnection { implicit c =>
        SQL("SELECT * FROM foo").as(fooParser *)
    }

    val fooParser = {
        get[Float]("bar") map {     
          case bar => Foo(bar)
        }
    }
}

这会产生错误: could not find implicit value for parameter extractor: anorm.Column[Float]

使用双精度类型时一切正常。以某种方式可以使用Anorm的单精度浮点数吗?


10721
2018-06-24 19:12


起源



答案:


您始终可以基于现有的列解析器创建自己的列解析器:

 implicit def rowToFloat: Column[Float] = Column.nonNull { (value, meta) =>
  val MetaDataItem(qualified, nullable, clazz) = meta
  value match {
    case d: Float => Right(d)
    case _ => Left(TypeDoesNotMatch("Cannot convert " + value + ":" + value.asInstanceOf[AnyRef].getClass + " to Float for column " + qualified))
  }
}

但它匹配JDBC驱动程序返回的值的类型,这可能不正确(取决于列定义)。


13
2018-06-25 07:02



在这里查看代码: github.com/isaka/Play20/commit/... - Mortimer


答案:


您始终可以基于现有的列解析器创建自己的列解析器:

 implicit def rowToFloat: Column[Float] = Column.nonNull { (value, meta) =>
  val MetaDataItem(qualified, nullable, clazz) = meta
  value match {
    case d: Float => Right(d)
    case _ => Left(TypeDoesNotMatch("Cannot convert " + value + ":" + value.asInstanceOf[AnyRef].getClass + " to Float for column " + qualified))
  }
}

但它匹配JDBC驱动程序返回的值的类型,这可能不正确(取决于列定义)。


13
2018-06-25 07:02



在这里查看代码: github.com/isaka/Play20/commit/... - Mortimer