code: @Nullable
    public static String generateQueryString(Map<String, String> queryMap) {
      if (queryMap == null || queryMap.isEmpty()) {
        return null;
      }
      ArrayList<String> pairs = new ArrayList<>(queryMap.size());
      try {
        for (Map.Entry<String, String> entry : queryMap.entrySet()) {
          pairs.add(
              URLEncoder.encode(entry.getKey(), "UTF-8") + QUERY_KEY_VALUE_SEPARATOR + URLEncoder
                  .encode(entry.getValue(), "UTF-8"));
        }
      } catch (UnsupportedEncodingException e) {
        throw new RuntimeException(e);
      }
  
      Joiner joiner = Joiner.on(QUERY_SEPARATOR);
      return joiner.join(pairs);
    }
docs: Generates a query string from a {@link Map <String, String>} of key/value pairs.
  
  @param queryMap the map of query key/value pairs
  @return the generated query string, null if the input map is null or empty