Вопрос по playframework-2.0, scala, anorm – Anorm parse значения поплавка

11

В 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?

Ваш Ответ

1   ответ
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, который может быть неправильным (зависит от определения столбца).

проверьте код здесь тоже:github.com/isaka/Play20/commit/…

Похожие вопросы