Frage

Ich habe eine Postgres-Tabelle -

CREATE TABLE "Contest"
(
  id serial NOT NULL,
  name varchar(100) NOT NULL,
  type char(1) NOT NULL,
  status char(1) NOT NULL,
  ...
)

Ich versuche, Feldwerte abzurufen type Und status zurück zu meiner Play 2.x (Anorm)-Anwendung:

 val parseContest = {
  get[Pk[Int]]("id") ~
  get[String]("name") ~
  get[Char]("type") ~
  get[Char]("status") map {
  case id~name~c_type~status =>
    Contest(id, name, c_type, status)
  }
}

und erhalte die Fehlermeldung:

could not find implicit value for parameter extractor: anorm.Column[Char]

Es sieht so aus, als ob „Char“ von einer Norm nicht unterstützt wird.Was sollte ich an meinem Code ändern?Ist es eine gute Praxis, es zu verwenden? get[String]("status") und dann status.head als Workaround?

War es hilfreich?

Lösung

Ich denke, Sie könnten einen impliziten Konverter für Sie schreiben char Säulen.Das würde so aussehen:

implicit def columnToChar: Column[Char] = {
    Column[Char](transformer = {
      (value, meta) =>
        val MetaDataItem(qualified, nullable, clazz) = meta
        value match {
          case ch: String => Right(ch.head)
          case _ => Left(TypeDoesNotMatch("Cannot convert " + value + " to Char for column " + qualified))
        }
    })
  }

Stellen Sie dann sicher, dass dieser Konverter im Lieferumfang enthalten ist.

Ich bin mir nicht sicher, ob es sich bei dem Wert um einen String handelt, aber Sie können ihn überprüfen und die entsprechenden Korrekturen vornehmen.

Andere Tipps

Zu diesem Thema gibt es kürzlich eine zusammengeführte PR auf Anorm: https://github.com/playframework/playframework/pull/2189

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top