code: public <T> Response<T> postJson(Endpoint endpoint, Object requestMessage, Class<T> responseClass, NameValuePair... headers) throws IOException {
          if (requestMessage == null) {
              return post(endpoint, responseClass, headers);
          } // deal with null case
  
          // Create the request
          HttpPost post = new HttpPost(endpoint.url());
          post.setHeaders(combineHeaders(headers));
  
          // Add the request message if there is one
          post.setEntity(serialiseRequestMessage(requestMessage));
  
          // Send the request and process the response
          try (CloseableHttpResponse response = httpClient().execute(post)) {
              T body = deserialiseResponseMessage(response, responseClass);
              return new Response<>(response.getStatusLine(), body);
          }
      }
docs: Sends a POST request and returns the response.
  
  @param endpoint       The endpoint to send the request to.
  @param requestMessage A message to send in the request body. Can be null.
  @param responseClass  The class to deserialise the Json response to. Can be null if no response message is expected.
  @param headers        Any additional headers to send with this request. You can use {@link org.apache.http.HttpHeaders} constants for header names.
  @param <T>            The type to deserialise the response to.
  @return A {@link Response} containing the deserialised body, if any.
  @throws IOException If an error occurs.