将 Play 框架与 Slick 一起使用时,从固定字符数据库列中修剪值的正确方法是什么,正确的位置在哪里?
我要修剪字符串的原因是数据库模式指定了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
使用fold
.
trim3
刚刚超出了我目前对 Scala 的理解的限制,并显示了我的意图但没有编译。
情况下的编译错误trim3
为:
类型不匹配; 找到:所需对象:play.api.libs.json.Json.JsValueWrapper
我当然可以接受 using fold
,但是通常的方法是什么?