我有一个postgres表 -

CREATE TABLE "Contest"
(
  id serial NOT NULL,
  name varchar(100) NOT NULL,
  type char(1) NOT NULL,
  status char(1) NOT NULL,
  ...
)

我试图获取字段值 typestatus 回到我的游戏2。x(Anorm)应用:

 val parseContest = {
  get[Pk[Int]]("id") ~
  get[String]("name") ~
  get[Char]("type") ~
  get[Char]("status") map {
  case id~name~c_type~status =>
    Contest(id, name, c_type, status)
  }
}

并得到错误:

could not find implicit value for parameter extractor: anorm.Column[Char]

看起来'Char'不被anorm支持。我应该在我的代码中更改什么?使用它是好的做法吗 get[String]("status") 然后 status.head 作为解决方法?

有帮助吗?

解决方案

我想你可以为你的 char 列。看起来像这样:

implicit def columnToChar: Column[Char] = {
    Column[Char](transformer = {
      (value, meta) =>
        val MetaDataItem(qualified, nullable, clazz) = meta
        value match {
          case ch: String => Right(ch.head)
          case _ => Left(TypeDoesNotMatch("Cannot convert " + value + " to Char for column " + qualified))
        }
    })
  }

然后确保此转换器在范围内。

我不确定该值将是一个字符串,但您可以检查它并进行相应的更正。

其他提示

关于这一点,Anorm上最近合并了PR: https://github.com/playframework/playframework/pull/2189

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top