Я использую Play 2.5 и ReactiveMongo. Это простая проблема, но я не могу понять. У меня есть контроллер, который получает username
и password
с представлением. Я хочу преобразовать этот запрос в модель типа UserModel
, а затем преобразовать эту модель в json и записать ее в MongoDB.Scala Play конвертировать запрос в 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>
}
Там нет необходимости использовать форму, чтобы получить JSON тело запрос – cchantep
Я никогда не говорил «это единственный способ» получить тело JSON. Вы не можете выполнять сложные проверки с помощью метода 'request.body'. Я пытаюсь объяснить своим подходом и как я обрабатываю подобные варианты использования. Если вы обнаружите ошибку, укажите это, и если у вас другое мнение, не стесняйтесь добавлять ответ. – oblivion
Это отлично работает, спасибо за ваш ответ. Я не знал, что такой формат можно использовать. – DarthBinks911