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

时间:2022-05-18 17:07:37

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

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

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

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


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

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

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://*.com/questions/11180429/anorm-parse-float-values

http://*.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