code: public String postJson(String endpoint, String params, JSONObject json, String requestId) throws IOException {
          String url = String.format("%s%s?%s", this.baseUri, endpoint, StringUtils.isBlank(params) ? "" : params);
          LOG.debug("{} POST {}", this.hashCode(), url);
          HttpPost post = new HttpPost(url);
  
          StringEntity entity = new StringEntity(json.toString());
          entity.setContentType(ContentType.APPLICATION_JSON.getMimeType());
          post.setEntity(entity);
  
          this.addHeaders(post);
          HttpClientContext context = this.getHttpClientContext();
          long start = System.currentTimeMillis();
          CloseableHttpResponse response = this.client.execute(post, context);
          if (!StringUtils.isBlank(requestId)) {
              this.responseTime.put(requestId, System.currentTimeMillis() - start);
          }
  
          String res = check(response);
          return res;
      }
docs: Issues HTTP POST request, returns response body as string.
  
  @param endpoint  endpoint of request url
  @param params    request line parameters
  @param json      request body
  @param requestId request id for record response time in millisecond
  
  @return response body
  
  @throws IOException in case of any IO related issue