如何设置选项值以在Play 2中形成映射?

str*_*obe 3 scala playframework-2.0

我想将Option值映射到表单但不会被忽略.例如:

case class Message(Id: Option[Int], name: String, description: Option[String])

val messageForm: Form[Message] = Form(
  mapping(
    "id"          -> ignored(Option(0)),
    "name"        -> nonEmptyText(minLength = 4, maxLength = 140),
    "description" -> text
)(Message.apply)(Message.unapply))
          ^

type mismatch;
found   : (Option[Int], String, Option[String]) => Message
required: (Option[Int], String, String)         => ?
Run Code Online (Sandbox Code Playgroud)

忽略"id"值使用成功,但"text"使用apply函数产生错误.怎么做得比?我需要为Option [String]编写自定义表单约束吗?

sen*_*nia 8

你可以转换Mapping[String]Mapping[Optional[String]]使用这样的optional方法:

val messageForm: Form[Message] = Form(
  mapping(
    "id"          -> ignored[Option[Int]](None),
    "name"        -> nonEmptyText(minLength = 4, maxLength = 140),
    "description" -> optional(text)
)(Message.apply)(Message.unapply))
Run Code Online (Sandbox Code Playgroud)

请注意,您可以None用来表示id字段中没有值.