2016-08-28 20 views
0

いくつかのJSONデータでバックエンドにPOSTリクエストを送信しようとしています。フロントエンドからの呼び出しは次のようになります。結構ですPlay Frameworkを使用してAjaxリクエストからPOST本体を受け取ることができません

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

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() 
    }); 
} 

生成されたログは、次のようになります。ここで

は、私がバックエンドでリクエストを処理する方法の開始(私は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] application - Body: null 

私はその後、json値を取得しようとする最初の行でNullpointer例外を取得しています。

何らかの理由で、POST本体が正しく受信されなかったようです。

ご協力いただきありがとうございます。

+0

。あなたのAjaxリクエストに 'postbody'を送るだけです。また、ブラウザ開発者ツールを使用してサーバーに送信されたAjaxリクエストを確認すると、送信されたリクエストが良好であることを確認できますか? – c4k

+0

私の見ているところでは、要求はよく見えます。また、同じペイロードを手動で作成したPOSTリクエストを送信しようとしたところ、同じアプリケーションログになってしまったので、問題はバックエンドとはまったく異なります。 –

答えて

0

Postbodyは正しく転送されましたが、何らかの理由で.asText().asJson()メソッドが正しく動作せず、nullが返されました。

私はこの小さな問題を回避すると私の問題を修正:あなたは `あなたがサーバーに送信何stringify`する必要はありません

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]; 
関連する問題