2016-07-22 6 views
0

私はScala - Spray - Sormを使ってRest APIを開発しています。私は既存のデータベースにSormフレームワークを実装しようとしています。 、保存、更新および削除は、すでに正常に動作しますが、私は、データベースから何かを照会しようとする時はいつでも、それは私に与えている:Spray/Sormは引数型の不一致を示します

[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 

私のモデルは次のとおりです。

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) 

今テスト目的のために、私は

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 

残念ながら、指定されたエラー出力でクエリでクラッシュします。私は何かが間違ったタイプのパラメータを得ていることを理解していますが、何が分かりません。

誰かが私を正しい方向に向けることができたら本当に感謝します。

答えて

1

犯人があります:

- 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 

あなたが応じてフィールドに文字列の代わりに提案ジョダタイプを使用する必要があります。

+0

ありがとうございました!私はJodaタイプを使用するようにすべてを変更し、また、1つのパラメータをDoubleに変更する必要があることに気付きました。これは私の問題を解決した – sergei

関連する問題