获取POST数据Play Framework(Java)

时间:2014-05-19 17:51:00

标签: java rest post playframework playframework-2.0

我有一个带有POST路由的Play应用程序,它将充当RESTful API。

在控制器中获取POST数据的最佳方法是什么?正如您从我的控制器中看到的那样,我尝试了这一点,但它似乎无法正常工作。

路线:

# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# Home page
GET     /                           controllers.Application.index()
GET     /api/getMessages            controllers.Application.getMessages()
POST    /api/createMessage          controllers.Application.createMessages()

控制器:

package controllers;

import play.*;
import play.mvc.*;
import static play.libs.Json.toJson;

import java.util.Map;

import models.*;

import views.html.*;

public class Application extends Controller {

    public static Result index() {
        return ok(index.render("Your new application is ready."));
    }

    public static Result createMessages(){
        final Map<String, String[]> values = request().body().asFormUrlEncoded();

        String from = values.get("from")[0];
        String subject = values.get("subject")[0]; 
        String message = values.get("message")[0];

        Message.create(from, subject, message);

        return ok(toJson("ok"));
    }

    public static Result getMessages(){
        return ok(toJson(Message.all()));
    }

}

请求:

Request Url: http://localhost:9000/api/createMessage
Request Method: POST
Status Code: 400
Params: {
    "from": "hello@test.com",
    "subject": "Hello",
    "message": "World"
}

2 个答案:

答案 0 :(得分:2)

尝试使用DynamicForm:

 public static Result createMessages(){
    DynamicForm df = play.data.Form.form().bindFromRequest();

    String from = df.get("from");
    String subject = df.get("subject");
    String message = df.get("message");

    if(from != null && subject != null && message != null){
        Message.create(from, subject, message);
        return ok(toJson("ok"));
    } else {
        return ok(toJson("error"));
    }


}

答案 1 :(得分:1)

我很确定作者已经找到了2年的解决方案:),但今天我遇到了同样的麻烦,可能我的细微差别会帮助某人:

我使用相同的方法来获取POST参数:

request().body().asFormUrlEncoded().get("from")[0];

我也得到了错误。但错误是因为不同的POST类型。所以在我的情况下,我只需要在下一个版本中期待多部分表格数据:

request().body().asMultipartFormData().asFormUrlEncoded().get("from")[0];

所以 - 对你要发送的数据和你期望的数据要小心一点:)