Slick で Play フレームワークを使用するときに固定文字データベース列から値をトリミングする正しい方法と正しい場所はどこですか?
文字列を削除したい理由は、データベース スキーマがcharacter(40)
型ではなく列の型を指定しているためcharacter varying
です。
私はこのケースクラスを持っています:
case class Test(id: Long, trimMe: Option[String])
私はこのスリックテーブルリレーションを持っています:
class Tests(tag: Tag) extends Table[Test](tag, "test") {
def id = column[Long ]("test_id", O.PrimaryKey, O.AutoInc)
def trimMe = column[String]("trim_me" )
def * = (id, trimMe) <> (Test.tupled, Test.unapply _)
}
JSON マッピングを使用したこのテスト クラスがあります。
object TrimTest {
implicit val testWrite = new Writes[Test] {
def writes(test: Test) = Json.obj(
"id" -> test.id ,
"trim" -> test.trimMe
)}
}
これはすべて機能しますが、スペースが埋め込まれた文字列を返します。
JSON マッパーでトリミングのいくつかのバリエーションを試しました。
object TrimTest {
implicit val testWrite = new Writes[Test] {
def writes(test: Test) = Json.obj(
"id" -> test.id ,
"trim1" -> test.trimMe.map(_.trim) ,
"trim2" -> test.trimMe.fold("") {_.trim} ,
"trim3" -> test.trimMe.map(_.trim).getOrElse("")
)}
}
trim1
上記は機能しますnull
が、オプションの値が存在しない場合は戻ります。
trim2
map
はすべてのケースで機能しますが、さまざまな場所で、getForElse
を使用するよりも「より慣用的な Scala」であると述べられているのを見てきましたfold
。
trim3
現在の Scala の理解の限界を超えており、私の意図を示していますが、コンパイルされません。
の場合のコンパイルエラーtrim3
は次のとおりです。
型の不一致; found : 必要なオブジェクト: play.api.libs.json.Json.JsValueWrapper
私は確かに を使用して生活することができますがfold
、これを行う通常の方法は何ですか?