2012-04-09 119 views
1

我需要用JSON数据发送POST方法,确保我需要发送JSON对象序列化为字符串。不是JSON字符串本身。我怎样才能实现这个使用JAVA如何使用JSON数据(java)发送POST方法?

+1

你使用GWT吗? – 2012-04-09 09:03:42

+0

至于POST部分:http://stackoverflow.com/questions/3324717/sending-http-post-request-in-java – Thilo 2012-04-09 09:03:50

+1

你是什么意思 - JSON对象序列化为字符串。不是JSON字符串本身? – 2012-04-09 09:05:58

回答

0

我会推荐使用Jersey REST框架,它与GAE很好的工作。 Here是一个演示。

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

欲了解更多,您可以看到这example

0

使用gson,您可以非常轻松地将JSON数据发布到Web服务。

例如:与

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 
    } 
} 

回复:

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

现在发送POJO到真正网络服务

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

(注意,等同在写作时借给cURL命令) - >

curl 'https://robertsspaceindustries.com/api/stats/getCrowdfundStats' --data-binary '{"fans":true,"funds":true}' 
相关问题