When working with RESTful APIs, it’s common to exchange data in JSON (JavaScript Object Notation) format. However, when sending JSON data in an HTTP request, you may encounter a 415 "Unsupported Media Type" error. This tutorial will cover the basics of working with JSON data in HTTP requests and provide tips on how to avoid common pitfalls.
Understanding HTTP Request Headers
When sending an HTTP request, it’s essential to include the correct headers to indicate the type of data being sent. The two most important headers for JSON data are:
Content-Type
: specifies the format of the data being sent in the request body.Accept
: specifies the format of the data expected in the response.
For JSON data, the Content-Type
header should be set to application/json
, and the Accept
header should also be set to application/json
.
Setting Request Headers
To set the request headers, you can use the following code:
HttpURLConnection con = (HttpURLConnection) myurl.openConnection();
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Accept", "application/json");
Note that when setting the Content-Type
header, it’s essential to avoid including unnecessary characters, such as spaces or semicolons. The correct format is application/json
.
Encoding JSON Data
When sending JSON data in an HTTP request, you need to encode it correctly. You can use a library like Google Gson to generate JSON objects and convert them to strings.
JsonObject requestJson = new JsonObject();
// add properties to the JSON object
String jsonStr = requestJson.toString();
Then, you can write the encoded JSON data to the output stream:
OutputStream os = con.getOutputStream();
os.write(jsonStr.getBytes("UTF-8"));
os.close();
Common Pitfalls
When working with JSON data in HTTP requests, there are a few common pitfalls to watch out for:
- Including unnecessary characters in the
Content-Type
header, such as spaces or semicolons. - Failing to set the correct
Accept
header. - Using an incorrect encoding when writing the JSON data to the output stream.
By following these best practices and avoiding common pitfalls, you can ensure that your HTTP requests with JSON data are successful and avoid 415 "Unsupported Media Type" errors.
Example Code
Here’s a complete example of sending a JSON object in an HTTP request:
import java.net.*;
import java.io.*;
public class JsonHttpRequest {
public static void main(String[] args) throws Exception {
URL myurl = new URL("http://example.com");
HttpURLConnection con = (HttpURLConnection) myurl.openConnection();
con.setDoOutput(true);
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Accept", "application/json");
JsonObject requestJson = new JsonObject();
// add properties to the JSON object
String jsonStr = requestJson.toString();
OutputStream os = con.getOutputStream();
os.write(jsonStr.getBytes("UTF-8"));
os.close();
int HttpResult = con.getResponseCode();
if (HttpResult == HttpURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
} else {
System.out.println(con.getResponseCode());
System.out.println(con.getResponseMessage());
}
}
}