code: protected void download(JSONObject json, final ProgressListener progressListener, ResponseListener responseListener) {
          String contentType = headers.get(CONTENT_TYPE);
  
          if (contentType == null) {
              contentType = JSON_CONTENT_TYPE;
          }
  
          RequestBody body = RequestBody.create(MediaType.parse(contentType), json.toString());
  
          sendRequest(progressListener, responseListener, body);
      }
docs: <p>
  Download this resource asynchronously, with the given JSON object as the request body.
  The download progress will be monitored with a {@link ProgressListener}.
  If the Content-Type header was not previously set, this method will set it to "application/json".
  </p>
  
  <p>
  <b>Note: </b>This method consumes the <code>InputStream</code> from the response and closes it,
  so the {@link Response#getResponseByteStream()} method will always return null for this request.
  </p>
  
  @param json              The JSON object to put in the request body
  @param progressListener  The listener that monitors the download progress
  @param responseListener  The listener whose onSuccess or onFailure methods will be called when this request finishes