无法使用Play框架从Ajax请求中接收POST正文

Unable to receive POST body from Ajax request using Play Framework

本文关键字:请求 正文 POST Ajax Play 框架      更新时间:2023-09-26

我正试图发送POST请求到我的后端与一些JSON数据。来自前端的调用看起来像这样:

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值。

由于某些原因,POST主体似乎没有被正确接收。

感谢您的帮助。

结果显示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];