2014-11-07 2 views
0

Я пытаюсь сделать что-то очень просто с Playframework Scala (2.3): создать маршрут POST и получить параметры POST.Playframework POST параметр

Маршрут определения

POST /ff/user    controllers.Application.createUser 

Контроллер

def createUser = Action.async { request => 
    val user = request.queryString.get("user").flatMap(_.headOption) 
    val email = request.queryString.get("email").flatMap(_.headOption) 
    val firstname = request.queryString.get("firstname").flatMap(_.headOption) 
    val lastname = request.queryString.get("lastname").flatMap(_.headOption) 

    Logger.debug("Create User") 
    Logger.debug(s"user=$user") 
    Logger.debug(s"email=$email") 

    Ok("Youpi") 
} 

Когда я отправляю запрос/ФФ/пользователя, журнал говорит: пользователь = None, электронная почта = None. Я не могу понять, почему они «Нет». Что не так?

Благодарим за помощь.

ответ

2

При использовании POST, например, вы, вероятно, захотите посмотреть поле body на параметр request, который будет содержать форму, которая была опубликована. Обычно вы не используете строку запроса с запросами POST (подробнее об этом here). Таким образом, это может выглядеть следующим образом:

def createUser = Action.async { request => 
    val user = request.body.asFormUrlEncoded.get.get("user").head 
    Future(Ok()) 
} 

Вы также можете использовать Action.async перегрузки, которая обеспечивает анализируемое тело. Например, это может выглядеть так:

def createUser = Action.async(parse.urlFormEncoded) { request => 
    //body is already treated as a Map[String, Seq[String]] because of the parameter passed to async 
    val user = request.body("user").head 
    Future(Ok()) 
} 
+0

Спасибо, что работает! – Greg

Смежные вопросы