Должны быть взяты байты UTF-8 и отправлены как есть. DataOutputStream для чего-то совершенно другого. Поскольку это одна запись, вы можете просто использовать OutputStream, который вы получаете от соединения. BufferedOutputStream, вероятно, не имеет смысла.
Промывка перед закрытием никогда не нужна. Нужно промывать только на стоящей, продолжающейся линии.
Try-with-resources закрывается автоматически, даже если возникло исключение.
conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
conn.setRequestProperty("Accept", "application/json");
conn.setDoOutput(true);
//conn.setDoInput(true);
byte[] content = jsonParam.getBytes("UTF-8"):
conn.setFixedLengthStreamingMode(content.length);
Log.i("JSON", jsonParam.toString());
try (OutputStream os = conn.getOutputStream()) {
os.write(content);
}