首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spray / Sorm提供的参数类型不匹配

Spray / Sorm提供的参数类型不匹配
EN

Stack Overflow用户
提问于 2016-07-22 16:15:00
回答 1查看 49关注 0票数 0

我正在使用Scala - Spray Sorm开发Rest API。我正在尝试在一个现有的数据库上实现Sorm框架。保存、更新和删除已经可以很好地工作了,但是每当我试图从数据库中查询一些东西时,它都会给我一个:

代码语言:javascript
复制
[ERROR] [07/22/2016 09:57:14.377] [on-spray-can-akka.actor.default-
dispatcher-5] [akka://on-spray-can/user/growficient-api] argument type mismatch:
Incorrect values of parameter types:
- long:
| class java.lang.Long:
| 91
- class java.lang.String:
| class org.joda.time.LocalDate:
| 2016-04-08
- class java.lang.String:
| class org.joda.time.LocalTime:
| 12:55:27.000
- int:
| class java.lang.Integer:
| 0
- int:
| class java.lang.Double:
| 2155.0
- int:
| class java.lang.Integer:
| 22
- int:
| class java.lang.Integer:
| 35
- int:
| class java.lang.Integer:
| -65

我的模型是:

代码语言:javascript
复制
object Samples extends DefaultJsonProtocol with SprayJsonSupport {
  implicit object samplesFormat extends RootJsonFormat[Samples] {
    override def read(value: JsValue) = {
      println(value)
      value.asJsObject.getFields("gatewayid", "sensorid", "date", "time", "wc", "ec", "temp", "battery", "rssi") match {
        case Seq(
          JsString(gatewayid),
          JsString(sensorid),
          JsString(date),
          JsString(time),
          JsNumber(wc),
          JsNumber(ec),
          JsNumber(temp),
          JsNumber(battery),
          JsNumber(rssi)
        ) =>
          new Samples(gatewayid, sensorid, date, time, wc.toInt, ec.toInt, temp.toInt, battery.toInt, rssi.toInt)
        case _ => throw new DeserializationException(s"$value is not properly formatted")
      }
    }

    override def write(s: Samples) = JsObject(
      "gatewayid" -> JsString(s.gatewayid),
      "sensorid" -> JsString(s.sensorid),
      "date" -> JsString(s.date),
      "time" -> JsString(s.time),
      "wc" -> JsNumber(s.wc),
      "ec" -> JsNumber(s.ec),
      "temp" -> JsNumber(s.temp),
      "battery" -> JsNumber(s.battery),
      "rssi" -> JsNumber(s.rssi)
    )
  }
}

case class Samples(gatewayid: String, sensorid: String, date: String, time: String, wc: Int, ec: Int, temp: Int, battery: Int, rssi: Int)

现在,出于测试目的,我只做了一个简单的查询来获取所有内容:

代码语言:javascript
复制
object DB extends Instance(
    entities = Set(
      Entity[Samples]()
    ),
    url = s"jdbc:mysql://$addr:$port/$database",
    user = username,
    password = password,
    initMode = InitMode.Create
  )

  DB.query[Samples].fetch().toList

不幸的是,它在查询时崩溃,并给出了错误输出。我知道有些东西得到了错误的参数类型,但我不知道是什么。

如果有人能给我指出正确的方向,我将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-22 17:40:17

罪魁祸首就在那里:

代码语言:javascript
复制
- class java.lang.String:
| class org.joda.time.LocalDate:
| 2016-04-08
- class java.lang.String:
| class org.joda.time.LocalTime:
| 12:55:27.000

您应该在相应的字段中使用建议的Joda类型,而不是String。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38521463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档