如何在Play Framework中使用POST参数?

Pom*_*oma 3 java playframework-2.0

我正在尝试使用JavaScript路由发出POST请求.在路线文件中:

POST /comments controllers.Clients.addComment(text: String, client: Int)
GET /assets/javascripts/routes controllers.Application.javascriptRoutes()
Run Code Online (Sandbox Code Playgroud)

在页面上:

jsRoutes.controllers.Clients.addComment(args.text, @client.id).ajax(...);
Run Code Online (Sandbox Code Playgroud)

但它创造了请求

POST http://localhost:9000/comments?text=qwe&client=1 HTTP/1.1
Run Code Online (Sandbox Code Playgroud)

如何让它在POST正文中传递参数而不是请求字符串?

bie*_*ior 9

看看ajax()文档 - 也就是这样的例子:

$.ajax({
    type: "POST",
    url: "some.php",
    data: { name: "John", location: "Boston" }
});
Run Code Online (Sandbox Code Playgroud)

由于Play JavaScript路由已经定义url并请求method(type),您只需要添加data(当然您不需要将它们指定为括号中的参数)

jsRoutes.controllers.Clients.addComment().ajax(
    data: {
      client: @client.id,
      text: args.text
    }
);
Run Code Online (Sandbox Code Playgroud)

此外,您只能向给定的客户端发送文本(由URL确定(它可以POSTPUT看起来更好:) :):

PUT /comments/:client     controllers.Clients.addComment(client: Int)
Run Code Online (Sandbox Code Playgroud)

在视图中:

jsRoutes.controllers.Clients.addComment(@client.id).ajax(
    data: { text: args.text }
);
Run Code Online (Sandbox Code Playgroud)

因此它将执行PUT请求,http://domain.tld/comments/123并将textform()POST发送时使用:

public static Result addComment(int client) {
    String receivedText = form().bindFromRequest().get("text");
    // save it to DB ...
    return ok( "Added comment: "+ receivedText+ ". for client id: " + client);
}
Run Code Online (Sandbox Code Playgroud)