Play 2.0框架 - POST参数

5

我正在尝试向Action POST参数,并在路由中编写:

# Home page
GET    /                         controllers.Application.index()

POST   /login/name:/password:    controllers.Application.login(name, password)

我有一个动作

public static Result login(String name, String password) {
    return ok(name + " "  + password);
}

我的表单是

<form action="/login" method="post">

    <input name="name" type="text" id="name">
    <input name="password" type="password" id="password">
    <input type="submit" value="Login">

</form>

它不起作用

对于请求'POST /login' [缺少参数:name]

我做错了什么?


请你能否编辑问题并放上表单的代码。 - Subir Kumar Sao
作为一个瞎猜(PHP开发者),/login/name:/password: 定义了你需要提供两个额外的参数.. 其中一个缺失了。这就是错误信息所说的。 - tereško
3个回答

3

您的路由不应包含动态部分(例如名称、密码),因为数据在请求体中而不是 URL 中。


3

只需将路由更改为以下内容:

POST   /login    controllers.Application.login(name, password)

不将动态名称(:name和:password)包含在路由路径中,假设变量来自请求(即您的HTML输入)。
您收到的错误表明名称和密码未出现在URL路径中...这是正确的,因为您在路由中指定的路径应该类似于:
/login/myname/mypassword
请检查http://www.playframework.org/documentation/2.0.1/JavaRouting并查看名为"Call to action generator method"的部分。

这种方法似乎不适用于POST,我正在使用的是https://dev59.com/l2Ij5IYBdhLWcg3wfVB8解决方案。 - Oleg

0
虽然这是一篇旧帖子,但如果有新人来看这个问题。我们不应该在使用post时添加参数,即使您使用了参数,也应该是GET /login/:name/:password controllers.Application.login(name: String, password: String)。
对于post请求,请不要添加参数,而是将其绑定到控制器内的一个case类中,并访问变量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接