【发布时间】:2019-03-29 20:18:10
【问题描述】:
试图从案例类中获取派生的输入对象。
val UserInputType = deriveInputObjectType[UserRow]()
case class UserRow(id: Int, name: String, lastModifiedTime: Option[java.sql.Timestamp] = None)
但出现以下错误
Type Option[java.sql.Timestamp] cannot be used as a default value. Please consider defining an implicit instance of `ToInput` for it.
我还定义了时间戳的类型:
case object DateTimeCoerceViolation extends Violation {
override def errorMessage: String = "Error during parsing DateTime"
}
def parseTime(s: String) = Try(Timestamp.valueOf(s)) match {
case Success(date) ⇒ Right(date)
case Failure(_) ⇒ Left(DateTimeCoerceViolation)
}
implicit val TimestampType = ScalarType[Timestamp](
"Timestamp",
coerceOutput = (ts, _) => ts.getTime,
coerceInput = {
case StringValue(ts, _, _, _,_) => parseTime(ts)
case _ => Left(DateTimeCoerceViolation)
},
coerceUserInput = {
case s: String => parseTime(s)
case _ => Left(DateTimeCoerceViolation)
}
)
如何解决这个问题?
【问题讨论】:
-
重现问题非常困难。你能分享更多细节吗?
-
Scala 不是引发错误的那个。桑格利亚群岛github.com/sangria-graphql/sangria/issues/224
-
为了每个人的利益,在桑格利亚汽酒中实现这一目标似乎有些复杂。如果您有
case class A(id: Int, name: String, lastModifiedTime: Option[Timestamp] = None)这样的案例类,则必须删除= None并在案例类之外处理时间的默认输入。