public static Map<String, Object> decode(final Map<String, Object> form, final String encoding) {
    if (form != null) {
      for (final String key : form.keySet()) {
        final Object value = form.get(key);
        if (value instanceof String) {
          form.put(key, decode(value.toString(), encoding));
        }
      }
    }

    return form;
  }
Decodes the encoded String values in the Map using the specified encoding (e.g. UTF-8). The Map
is structurally similar to a key/value data store but with the contents from an HTML form. Keys
with String values are searched and decoded, which then get repaired with the same Key. The
String value is decoded until the value stops changing (in other words, until the value is
completely decoded).
<p>

@param form a mapping of key/value pairs containing possible encoded String values.
@return the original Map (form) with keys re-paired with decoded String values.
@see #decode(String, String)
@see java.net.URLDecoder
geode-web/src/main/java/org/apache/geode/management/internal/web/util/UriUtils.java