could not find implicit value for parameter extractor 问题的解决

最近在用playframework做一个web应用.

playframework是一个web框架,可以将html和scala或java很好的结合起来,用起来很方便,而且功能强大.

现在决定把过程中遇到的有意义问题记录下来,以便自己以后查询,也能给别人带来方便最好.

我是刚接触playframework,有些内容可能会有错误,希望有人能指出,一起讨论进步.


在用playframework的时候,如果要对数据库进行读取,可能会出现下面的编译错误:

could not find implicit value for parameter extractor: 后面跟着一个数据类型.









我的理解就是"这个数据类型数据库支持,数据是以这种类型存储在数据库中的,但是playframework不支持这种类型",于是在读取数据库的时候出现了这个问题.


解决办法如下:

(针对上图中的问题)

在scala实现数据库读取的样例类中加上这个方法.

  implicit def rowToTimestamp: Column[Timestamp] = Column.nonNull { (value, meta) =>
    val MetaDataItem(qualified, nullable, clazz) = meta
    value match {
      case d: Timestamp => Right(d)
      case _ => Left(TypeDoesNotMatch("Cannot convert " + value + ":" + value.asInstanceOf[AnyRef].getClass + " to Timestamp for column " + qualified))
    }
  }
我是这么解决的,内容是网上查资料加上自己的一点修改.

网上的资料是针对playframework不能提取float,uuid类型的问题的解决办法,办法是将上面的一段程序换为:

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


implicit def rowToUUID: Column[UUID] = {
    Column.nonNull[UUID] { (value, meta) =>
      val u = UUID.fromString(value.toString)
      val MetaDataItem(qualified, nullable, clazz) = meta
      valueToUUIDOption(value) match {
        case Some(uuid) => Right(uuid)
        case _ => Left(TypeDoesNotMatch("Cannot convert " + value + ":" + value.asInstanceOf[AnyRef].getClass + " to UUID for column " + qualified))
      }
    }
  }


参考资料:

http://stackoverflow.com/questions/11180429/anorm-parse-float-values

http://stackoverflow.com/questions/18838261/how-do-i-add-an-additional-implicit-extractor-in-play-2-1-4-and-actually-use-it


转载请注明出处:

http://blog.csdn.net/thewolf2?viewmode=list




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值