1

i need toSend POST method with the JSON data ,Make sure i need to send JSON Object serialized into string. Not the JSON string itself.so how can i implement this using JAVA

achukrishnan
  • 875
  • 2
  • 8
  • 21
  • As for the POST part: http://stackoverflow.com/questions/3324717/sending-http-post-request-in-java – Thilo Apr 09 '12 at 09:03
  • 1
    And what do you mean by - JSON Object serialized into string. Not the JSON string itself? – Ido.Co Apr 09 '12 at 09:05

3 Answers3

1
  public static String sendPostRequest(String postURL) throws Exception{
    String responseStr=null;
    //make POST request
    String jsonContent = "{'name': 'newIndia','columns': [{'name': 'Species','type': 'STRING'}],'description': 'Insect Tracking Information.','isExportable': true}";
    //String data = "{\"document\" : {\"_id\": \"" + id+ "\", \"context\":" + context +"}}";
    URL url = new URL(postURL);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();

    connection.setDoOutput(true);
    connection.setDoInput(true);
    connection.setInstanceFollowRedirects(false);
    connection.setRequestMethod("POST");
    connection.setRequestProperty("Content-Type", "application/json");
    connection.setRequestProperty("charset", "utf-8");
    connection.setRequestProperty("Content-Length", "" + Integer.toString(jsonContent.getBytes().length));
    connection.setUseCaches(false);

    OutputStreamWriter  writer = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
    writer.write(jsonContent);       
    writer.close();
    responseStr="Response code: "+connection.getResponseCode()+" and mesg:"+connection.getResponseMessage();

    System.out.println(connection.getResponseMessage());


    InputStream response;                  

    // Check for error , if none store response
    if(connection.getResponseCode() == 200){
        response = connection.getInputStream();
    }else{
        response = connection.getErrorStream();
    }
    InputStreamReader isr = new InputStreamReader(response);
    StringBuilder sb = new StringBuilder();
    BufferedReader br = new BufferedReader(isr);
    String read = br.readLine();
    while(read != null){
        sb.append(read);
        read = br.readLine();
    }  
    // Print the String    
    System.out.println(sb.toString());

    connection.disconnect();
    return responseStr;
}

For more you can see this example.

Knowledge Serve
  • 616
  • 7
  • 9
0

I would recommend using Jersey REST framework which works great with GAE. Here is a demo.

husayt
  • 14,553
  • 8
  • 53
  • 81
0

Using gson, you can POST JSON data to a web-service very easily.

For example:

public class MyData {                //var myJsonData = {
    private boolean fans = true;     //          fans:true,  
    private boolean funds = true;    //          funds:true
    //private String chart = "day";  //         }
}                                    

Now send the POJO to a real web-service:

public class Main {

    public static void main(String... args) throws Exception {

        URL theUrl = new URL("https://robertsspaceindustries.com/api/stats/getCrowdfundStats");
        Gson gson = new Gson();
        JsonParser jp = new JsonParser();
        MyData thedata = new MyData();

        HttpsURLConnection urlConnection = (HttpsURLConnection) theUrl.openConnection();
        urlConnection.setRequestMethod("POST");
        urlConnection.setDoOutput(true); //allow parameters to be sent/appended 

        DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream());
        wr.writeBytes(gson.toJson(thedata)); //convert the POJO to JSON, then to binary.
        wr.flush();
        wr.close();

        urlConnection.connect(); //start request transmission

        JsonElement retJson = jp.parse(new InputStreamReader((InputStream) urlConnection.getContent())); //convert the input stream to a json element
        System.out.println(retJson.getAsJsonObject());

        urlConnection.disconnect(); //end request transmission
    }
}

Replies with:

{"success":1,"{"fans":910125,"funds":8410319141},"code":"OK","msg":"OK"}

(Note, the equivalent cURL command at time of writing was) ->

curl 'https://robertsspaceindustries.com/api/stats/getCrowdfundStats' --data-binary '{"fans":true,"funds":true}'
Koffy
  • 768
  • 8
  • 19