简体   繁体   中英

Java : How to handle POST request without form?

I'm sending a http post request from javascript, with some json data.

Javascript

var data = {text : "I neeed to store this string in database"}
var xhr= new XMLHttpRequest();
    xhr.open("POST","http://localhost:9000/postJson"  , true);
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
    xhr.send(data);
    xhr.setRequestHeader("Connection", "close");

    //Also, I've tried a jquery POST
    //$.post('postJson', {'data=' : JSON.stringify(data)});
    //But this doesn't make a request at all. What am I messing up here?

Route

POST    /postJson                   controllers.Application.postJson()

Controller

public static Result postJson(){

    //What should I write here to get the data

    //I've tried the below but values is showing null 
    RequestBody rb=request().body();
    final Map<String,String[]> values=rb.asFormUrlEncoded(); 

}

What is the way to parse the POST request body? Much thanks!

Retreive the request body directly as JSON... no need to complicate your life.

public static Result postJson() {

    JsonNode rb = request().body().asJson();

    //manipulate the result
    String textForDBInsertion = rb.get("text").asText(); //retreives the value for the text key as String

    Logger.debug("text for insertion: " + textForDBInsertion
               + "JSON from request: " + rb);

    return ok(rb);
}

Also, I recommend you use the AdvancedRestClient Chrome plugin for testing. This way you can eliminate from the equation client-side code errors.

Cheers!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM