2012-06-24 5 views
11

Im Play-Framework 2.0, Ich versuche, eine echte (dh einfache Genauigkeit float) zu laden Spalt von PostgreSQL geben Sie eine Reihe Parser wie folgt aus:Anorm Parse-float-Wert

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) 
     } 
    } 
} 

dies einem Fehler erzeugt: could not find implicit value for parameter extractor: anorm.Column[Float]

Bei Verwendung von Doppelpräzisionstypen funktioniert alles einwandfrei. Ist es irgendwie möglich, Float mit einfacher Genauigkeit mit Anorm zu verwenden?

Antwort

13

Sie können Ihre eigene Spalte Parser Basis auf den bestehenden immer erstellen:

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)) 
    } 
} 

aber sie paßt auf der Art des Wertes durch die JDBC-Treiber zurückgegeben, die (abhängig von der Spaltendefinition) möglicherweise nicht korrekt .

+1

überprüfen Sie den Code auch hier: https://github.com/isaka/Play20/commit/27f952257d775e1bfb4a0c61de6e0ef9c5a555d6 – Mortimer

Verwandte Themen