2012-06-24 63 views
11

在播放框架2.0,我試圖加載真實(即單精度浮點數)使用行解析器像這樣從PostgreSQL類型柱:ANORM解析浮點值

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中使用單精度浮點數?

回答

13

你總是可以創建在現有的你自己的列解析器基地:

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驅動程序返回值的類型可能是不正確的(取決於列的定義)相匹配。

+1

請查看此處的代碼:https://github.com/isaka/Play20/commit/27f952257d775e1bfb4a0c61de6e0ef9c5a555d6 – Mortimer