code: public URI expand(Map<String, ?> uriVariables) {
  		UriComponents expandedComponents = this.uriComponents.expand(uriVariables);
  		UriComponents encodedComponents = expandedComponents.encode();
  		return encodedComponents.toUri();
  	}
docs: Given the Map of variables, expands this template into a URI. The Map keys represent variable names,
  the Map values variable values. The order of variables is not significant.
  <p>Example:
  <pre class="code">
  UriTemplate template = new UriTemplate("https://example.com/hotels/{hotel}/bookings/{booking}");
  Map&lt;String, String&gt; uriVariables = new HashMap&lt;String, String&gt;();
  uriVariables.put("booking", "42");
  uriVariables.put("hotel", "Rest & Relax");
  System.out.println(template.expand(uriVariables));
  </pre>
  will print: <blockquote>{@code https://example.com/hotels/Rest%20%26%20Relax/bookings/42}</blockquote>
  @param uriVariables the map of URI variables
  @return the expanded URI
  @throws IllegalArgumentException if {@code uriVariables} is {@code null};
  or if it does not contain values for all the variable names