无法使用Play Framework从Ajax请求接收POST正文

时间:2016-08-28 11:15:24

标签: javascript java ajax http playframework

我正在尝试使用一些JSON数据向我的后端发送POST请求。来自前端的电话看起来像这样:

function register() {
  var user = $("#form_reg_username").val();
  var pass = $("#form_reg_password").val();
  var referal = $("#form_reg_referal").val();
  var postbody = {};
  var url = "http://" + location.host + "/api/admin/register";
  postbody.username = user;
  postbody.password = pass;
  postbody.referal = referal;

  var jsonbody = JSON.stringify(postbody);
  console.log(jsonbody);

  $.ajax({
    type: "POST",
    url: url,
    data: jsonbody,
    dataType: "json",
    success: registerHandler()
  });
}

生成的日志如下所示:

{"username":"jakob","password":"11111","referal":"urgotislove"}

哪个好。

以下是我在后端处理请求的开始(我正在使用play 2.4)

 public Result adminRegister() {
        // Generate JSON from postbody
        ObjectNode json = Json.newObject();

        Logger.info("Body: " + request().body().asText());
        JsonNode body = request().body().asJson();

        String username = body.get("username").asText();
        String password = body.get("password").asText();
        String referal = body.get("referal").asText();
        ...
}

查看我的应用程序日志,Info日志如下所示:

[info] application - Body: null

然后我在第一行尝试获取json值时得到Nullpointer异常。

因此出于某种原因,似乎没有正确接收POST正文。

感谢您提前提供任何帮助。

1 个答案:

答案 0 :(得分:0)

事实证明,Postbody已正确转移但由于某种原因,.asText()以及.asJson()方法无法正常工作并返回null。

我通过这个小解决方法解决了我的问题:

Http.RequestBody requestBody = request().body();
Map<String, String[]> body = requestBody.asFormUrlEncoded();

String username = body.get("username")[0];
String password = body.get("password")[0];
String referal = body.get("referal")[0];