I recently had an occasion where I had to perform an HTTP POST with JSON data from a Java service class as oppose to Javascript. No amount of Google searches turned up the answer I was after. Here are the steps I took to do so:
STEP 1 - Handle HTTP Post
The project I am working we were already using Commons HTTPClient which has a PostMethod class that peforms an HTTP Post. Here is the code to setup the post:
HttpClient clientService = new HttpClient(); PostMethod post = new PostMethod(); post.setURI(new URI("http://yoururl" false));
Step 2 - Find JSON Converter
The best tool kit I found for handling JSON is a combination of XStream and Jettison. Following the XStream tutorial, I did the following:
// This ensure that we drop the root element XStream xstream = new XStream(new JsonHierarchicalStreamDriver() { public HierarchicalStreamWriter createWriter(Writer writer) { return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE); } }); xstream.setMode(XStream.NO_REFERENCES); // Stream the class I want converted into JSON xstream.alias("site", ProjectBean.class);
Step 3 - Post the JSON Stream
Next up, is putting the two together and posting the JSON.
// Model bean to stream ProjectBean site = new ProjectBean(); post.setRequestHeader("Content-Type", "application/json"); // apply content-length here if known (i.e. from proxied req) // if this is not set, then the content will be buffered in memory post.setRequestEntity(new StringRequestEntity(xstream.toXML(site), "application/json", null)); // execute the POST int status = clientService.executeMethod(post); // Check response code if (status != HttpStatus.SC_OK) { throw new Exception("Received error status " + status); }
Conclusion
That is all there. I hope this helps.