0

我正在使用 Play 2.5 和 ReactiveMongo。这是一个简单的问题,但我无法弄清楚。我有一个从视图接收username和的控制器password,我想将此请求转换为类型的模型,UserModel然后将此模型转换为 json 并将其写入 MongoDB。

我的控制器:

class RegisterController @Inject() (val reactiveMongoApi: ReactiveMongoApi) 
extends Controller with MongoController with ReactiveMongoComponents {

  def registerPost = Action.async { request =>

  implicit val accountWrites = new Writes[UserModel] {
  def writes(account: UserModel) = Json.obj(
    "username" -> account.username,
    "password" -> account.password
  )
} //needs this for some reason?

val future = collection.insert(request.body) //trying to insert to mongo
future.map(_ => Ok)

我的模型:

case class UserModel(username: String, password: String) {}

object UserModel {

  implicit val format = Json.format[UserModel] //needs this for some reason?

  val userModel = Form(
mapping(
  "username" -> nonEmptyText,
  "password" -> nonEmptyText
)(UserModel.apply)(UserModel.unapply))
}

我的观点:

@(userForm: Form[UserModel])(implicit messages: Messages)

<h1>Register</h1>

@helper.form(action = routes.RegisterController.registerPost()) {
  @helper.inputText(userForm("username"))
  @helper.inputText(userForm("password"))

  <button type="submit" name="action" value="register">Register</button>

}
4

1 回答 1

0

这些是您需要做的关键事情:

=>Bind the form request在您的控制器方法中,registerPost. 为此,您还需要进行form mapping设置。UserModel此映射将帮助您使用方法内的表单数据生成对象。要完成所有这些,请参见此处的 ScalaForms

=> 你不需要writes这里。您可以使用format两者来执行json writes and reads

=> 现在将 UserModel 转换为 JsValue 为:

//usermodel will be generated by binding the form data
implicit val format = Json.format[UserModel]
val userModelJson = format.writes(usermodel)

=> 然后您可以简单地将存储库称为:

collection.insert(userModelJson)
于 2017-02-05T11:17:17.650 回答