How can I send json object in http post in java

47,816

I prefer to continue with HttpURLConnection over HttpClient. Some comments over advantages can be found at this SE question

output.write(json.toString());

should be changed to

byte[] jsonBytes = json.getBytes("UTF-8");
output.write(jsonBytes);
output.flush();

Do not forget to call flush() after writing the object and UTF-8 format should be instructed before write operation.

Share:
47,816
arpit joshi
Author by

arpit joshi

Updated on July 09, 2022

Comments

  • arpit joshi
    arpit joshi almost 2 years

    I want to send a JSON object(Note it should not be converted into a string as the server side code is based on the Spring starter project and has params as (@RequestBody PCAP pcap) )I have my below code but it converts the body into a string which gives me 400 bad request .

    private void sendData(String ip){
        try{
            JSONObject json=new JSONObject();
            json.put("time_range", "22-23");
            json.put("flow_id", "786");
            json.put("ip_a", "192.65.78.22");
            json.put("port_a", "8080");
            json.put("regex", "%ab");
    
    
    
            URL url=new URL("http://"+ip+":8080/pcap");
            HttpURLConnection httpcon=(HttpURLConnection)url.openConnection();
            httpcon.setDoOutput(true);
            httpcon.setRequestMethod("POST");
            httpcon.setRequestProperty("Accept", "application/json");
            httpcon.setRequestProperty("Content-Type", "application/json");
            Cookie cookie=new Cookie("user", "abc");
            cookie.setValue("store");
            httpcon.setRequestProperty("Accept", "application/json");
            httpcon.setRequestProperty("Cookie", cookie.getValue());
    
            OutputStreamWriter output=new OutputStreamWriter(httpcon.getOutputStream());
            System.out.println(json);
            output.write(json.toString());
            httpcon.connect();
            String output1=httpcon.getResponseMessage();
            System.out.println(output1);
    
        }catch(Exception e){
    
        }
    
    }
    

    Note: Server side code is

    @RequestMapping(value = URIConstansts.PCAP, produces = { "application/json" }, method = RequestMethod.POST)
        public  ResponseEntity getPcap(HttpServletRequest request,@RequestBody PcapParameters pcap_params )